ฉันจะเพิ่มไฟล์ jar ในตัวเครื่อง (ยังไม่ได้เป็นส่วนหนึ่งของที่เก็บ Maven) ได้โดยตรงในแหล่งห้องสมุดของโครงการของฉันได้อย่างไร
install-file
สคริปต์
ฉันจะเพิ่มไฟล์ jar ในตัวเครื่อง (ยังไม่ได้เป็นส่วนหนึ่งของที่เก็บ Maven) ได้โดยตรงในแหล่งห้องสมุดของโครงการของฉันได้อย่างไร
install-file
สคริปต์
คำตอบ:
ติดตั้ง JAR ในที่เก็บ Maven ท้องถิ่นของคุณดังนี้:
mvn install:install-file \
-Dfile=<path-to-file> \
-DgroupId=<group-id> \
-DartifactId=<artifact-id> \
-Dversion=<version> \
-Dpackaging=<packaging> \
-DgeneratePom=true
แต่ละที่อ้างถึง:
<path-to-file>
: พา ธ ไปยังไฟล์ที่จะโหลดเช่น→ c:\kaptcha-2.3.jar
<group-id>
: กลุ่มที่ควรลงทะเบียนไฟล์ภายใต้เช่น→ com.google.code
<artifact-id>
: ชื่อสิ่งประดิษฐ์สำหรับไฟล์เช่น→ kaptcha
<version>
: เวอร์ชันของไฟล์เช่น→ 2.3
<packaging>
: บรรจุภัณฑ์ของไฟล์เช่น→ jar
การอ้างอิง
install:install-file
คุณสามารถเพิ่มการพึ่งพาในท้องถิ่นโดยตรง (ดังที่กล่าวไว้ในโครงการสร้าง maven พร้อมห้องสมุดที่เป็นกรรมสิทธิ์ ) เช่นนี้:
<dependency>
<groupId>com.sample</groupId>
<artifactId>sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath>
</dependency>
ปรับปรุง
ในรุ่นใหม่คุณสมบัตินี้ถูกทำเครื่องหมายว่าเลิกใช้แล้ว แต่ยังใช้งานได้และยังไม่ถูกลบออก (คุณเพิ่งเห็นคำเตือนในบันทึกระหว่างการเริ่มต้น Maven) เกิดปัญหาขึ้นที่กลุ่ม maven เกี่ยวกับเรื่องนี้ https://issues.apache.org/jira/browse/MNG-6523 (คุณสามารถเข้าร่วมและอธิบายได้ว่าเหตุใดคุณลักษณะนี้จึงมีประโยชน์ในบางกรณี) ฉันหวังว่าคุณสมบัตินี้จะยังคงอยู่!
หากคุณกำลังขอให้ฉันตราบเท่าที่คุณลักษณะที่ไม่ได้เอาออกผมใช้วิธีนี้ทำให้การพึ่งพาเพียงหนึ่งไฟล์ไหซนในโครงการของฉันที่ไม่พอดีกับพื้นที่เก็บข้อมูล หากคุณสมบัตินี้ถูกลบออกไปมีคำตอบที่ดีมากมายที่นี่ซึ่งฉันสามารถเลือกได้ในภายหลัง!
artifactId
และgroupId
ผิดใช่ไหม
ประการแรกฉันต้องการให้เครดิตสำหรับคำตอบนี้กับผู้ใช้ที่ไม่ระบุชื่อ Stack Overflow - ฉันค่อนข้างแน่ใจว่าฉันเคยเห็นคำตอบที่คล้ายกันที่นี่มาก่อน - แต่ตอนนี้ฉันไม่พบมัน
ตัวเลือกที่ดีที่สุดสำหรับการมีไฟล์ JAR ในพื้นที่เป็นการอ้างอิงคือการสร้างที่เก็บ Maven แบบโลคัล พื้นที่เก็บข้อมูลดังกล่าวไม่มีอะไรมากไปกว่าโครงสร้างไดเรกทอรีที่เหมาะสมพร้อมไฟล์ pom ในนั้น
สำหรับตัวอย่างของฉัน: ฉันมีโครงการหลักของฉันเกี่ยวกับ${master_project}
สถานที่และ subproject1 ${master_project}/${subproject1}
อยู่บน
แล้วฉันจะสร้างพื้นที่เก็บข้อมูล Maven
${master_project}/local-maven-repo
ใน:
ในไฟล์ pom ใน subproject1 ซึ่งตั้งอยู่ที่ที่${master_project}/${subproject1}/pom.xml
เก็บจะต้องมีการระบุซึ่งจะพาเส้นทางไฟล์เป็นพารามิเตอร์ URL:
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.parent.basedir}/local-maven-repo</url>
</repository>
</repositories>
การพึ่งพาสามารถระบุว่าเป็นที่เก็บอื่น ๆ สิ่งนี้ทำให้ที่เก็บ pom ของคุณเป็นอิสระ ตัวอย่างเช่นเมื่อ JAR ที่ต้องการพร้อมใช้งานใน Maven central คุณเพียงแค่ต้องลบมันออกจาก repo ท้องถิ่นของคุณและมันจะถูกดึงออกจาก repo เริ่มต้น
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.servicebinder</artifactId>
<version>0.9.0-SNAPSHOT</version>
</dependency>
สิ่งสุดท้ายที่ต้องทำคือการเพิ่มไฟล์ JAR ไปยังที่เก็บในเครื่องโดยใช้สวิตช์ -DlocalRepositoryPath ดังนี้:
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file \
-Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
-DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
-Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
-DlocalRepositoryPath=${master_project}/local-maven-repo
เมื่อติดตั้งไฟล์ JAR แล้ว Maven repo ของคุณสามารถกำหนดให้เป็นที่เก็บรหัสได้และการตั้งค่าทั้งหมดไม่ขึ้นกับระบบ ( ตัวอย่างการทำงานใน GitHub )
ฉันยอมรับว่าการมี JARs มุ่งมั่นที่จะ repo ซอร์สโค้ดไม่ใช่วิธีปฏิบัติที่ดี แต่ในชีวิตจริงการแก้ปัญหาที่รวดเร็วและสกปรกบางครั้งก็ดีกว่า Nexus repo ที่เป่าเต็มเพื่อโฮสต์ JAR หนึ่งตัวที่คุณไม่สามารถเผยแพร่ได้
${project.parent.basedir}
ดูเหมือนจะไม่แก้ไขอะไรในปัจจุบันผมใช้${project.basedir}/..
และทำงานได้อย่างสมบูรณ์แบบ
<mirrorOf>*</mirrorOf>
ร์
สร้างโฟลเดอร์ใหม่สมมติว่าlocal-maven-repo
รากของโครงการ Maven ของคุณ
เพียงเพิ่ม repo ในพื้นที่<project>
ของคุณpom.xml
:
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.basedir}/local-maven-repo</url>
</repository>
</repositories>
จากนั้นสำหรับแต่ละ jar ภายนอกที่คุณต้องการติดตั้งให้ไปที่รูทของโครงการและดำเนินการ:
mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]
local-maven-repo
จะมีโฟลเดอร์รวมอยู่ (เหมือนเด็ก ๆ ในตัวอย่างนี้) ในโฟลเดอร์ซอร์สของคุณ
ฉันต้องการโซลูชันดังกล่าว - ใช้maven-install-plugin
ในไฟล์ pom:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>lib/yourJar.jar</file>
<groupId>com.somegroup.id</groupId>
<artifactId>artefact-id</artifactId>
<version>x.y.z</version>
<packaging>jar</packaging>
</configuration>
</execution>
</executions>
</plugin>
ในกรณีนี้คุณสามารถดำเนินการmvn initialize
และ jar จะถูกติดตั้งใน repo maven ท้องถิ่น ตอนนี้ jar นี้พร้อมใช้งานในระหว่างขั้นตอน maven ใด ๆ บนเครื่องนี้ (อย่าลืมรวมการพึ่งพานี้เป็นการพึ่งพา maven อื่น ๆ ใน pom ด้วย<dependency></dependency>
แท็ก) นอกจากนี้ยังเป็นไปได้ที่จะผูกติดตั้ง jar ไม่เป็นinitialize
ขั้นตอน แต่เป็นขั้นตอนอื่นที่คุณต้องการ
mvn initialize
ก่อนหน้านี้mvn package
: ฉันไม่สามารถทำได้mvn initialize package
หรือไม่ก็พยายามดาวน์โหลด JAR จาก repo ส่วนกลาง ทำไมนี้ ฉันคิดว่ามันจะทำงานตามเป้าหมาย / ขั้นตอนนี้ตามลำดับ
compile
) บิลด์จะล้มเหลว
<dependency>
<groupId>group id name</groupId>
<artifactId>artifact name</artifactId>
<version>version number</version>
<scope>system</scope>
<systemPath>jar location</systemPath>
</dependency>
<scope>system
เลิกใช้แล้วในขณะนี้
install:install-file
สิ่งประดิษฐ์ที่จะซื้อคืนในท้องถิ่นและใช้มันเป็น "ปกติ" การพึ่งพา (มีขอบเขตเริ่มต้นcompile
) หรือใช้วิธีการแก้ปัญหาพื้นที่เก็บข้อมูลในโครงการ
ใช่คุณสามารถมี แต่ความคิดที่ไม่ดี
แทนที่จะติดตั้งเหยือกเหล่านี้ทั้งหมดเพื่อลบล้าง repos
ยังดู
วิธีที่รวดเร็วและสกปรกจริงๆคือการชี้ไปที่ไฟล์ในเครื่อง:
<dependency>
<groupId>sample</groupId>
<artifactId>com.sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>
อย่างไรก็ตามสิ่งนี้จะอยู่บนเครื่องของคุณเท่านั้น (เห็นได้ชัด) สำหรับการแบ่งปันมันมักจะเหมาะสมที่จะใช้การจัดเก็บ m2 ที่เหมาะสม (Nexus / วัตถุโบราณ) หรือถ้าคุณไม่มีสิ่งเหล่านี้หรือไม่ต้องการตั้งค่า Maven ท้องถิ่น โครงสร้างที่เก็บถาวรและกำหนดค่า "พื้นที่เก็บข้อมูล" ใน pom ของคุณ: ท้องถิ่น:
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://C:/DEV//mymvnrepo</url>
</repository>
</repositories>
ระยะไกล:
<repositories>
<repository>
<id>my-remote-repo</id>
<url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
</repository>
</repositories>
สำหรับเส้นทางสัมพัทธ์นี้ยังสามารถใช้ตัวแปรเบสได้ด้วย:
<url>file:${basedir}</url>
<url>file:${basedir}</url>
เป็น URL พื้นฐานแทน
เพิ่ม JAR ในเครื่องของคุณในไฟล์ POM และใช้มันใน maven build
mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar
ตัวอย่างเช่น:
mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar
จากนั้นเพิ่มลงใน POM ดังนี้:
วิธีหนึ่งคือการอัปโหลดไปยังผู้จัดการพื้นที่เก็บข้อมูล Maven ของคุณเอง (เช่น Nexus) เป็นการดีที่จะมีผู้จัดการพื้นที่เก็บข้อมูลของตัวเองอยู่แล้ว
อีกวิธีที่ดีที่ฉันเห็นเมื่อเร็ว ๆ นี้คือการรวมปลั๊กอินการติดตั้ง Maven ในวงจรชีวิตการสร้างของคุณ: คุณประกาศใน POM เพื่อติดตั้งไฟล์ไปยังที่เก็บในเครื่อง เป็นค่าใช้จ่ายเล็กน้อย แต่มีขนาดเล็กและไม่มีขั้นตอนที่ต้องทำด้วยตนเอง
http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html
แน่นอนคุณสามารถเพิ่มไหลงในโฟลเดอร์นั้นได้ แต่บางทีมันอาจไม่ใช่สิ่งที่คุณต้องการเพื่อให้บรรลุ ...
หากคุณต้องการขวดเหล่านี้สำหรับการรวบรวมตรวจสอบคำถามที่เกี่ยวข้องนี้: ฉันสามารถเพิ่มไหใน maven 2 build classpath โดยไม่ต้องติดตั้งได้ไหม
นอกจากนี้ก่อนใครแนะนำให้ใช้อย่าใช้ขอบเขตระบบ
อีกกรณีที่น่าสนใจคือเมื่อคุณต้องการมีขวด maven ส่วนตัวของโครงการ คุณอาจต้องการรักษาความสามารถของ Maven เพื่อแก้ไขการพึ่งพาสกรรมกริยา การแก้ปัญหาค่อนข้างง่าย
เพิ่มบรรทัดต่อไปนี้ในไฟล์ pom.xml ของคุณ
<properties><local.repository.folder>${pom.basedir}/libs/</local.repository.folder>
</properties>
<repositories>
<repository>
<id>local-maven-repository</id>
<url>file://${local.repository.folder}</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
เปิดโฟลเดอร์. m2 / repositoryและคัดลอกโครงสร้างไดเรกทอรีของโครงการที่คุณต้องการนำเข้าสู่โฟลเดอร์libs
เช่นสมมติว่าคุณต้องการนำเข้าการอ้างอิง
<dependency>
<groupId>com.mycompany.myproject</groupId>
<artifactId>myproject</artifactId>
<version>1.2.3</version>
</dependency>
เพียงไปที่. m2 / พื้นที่เก็บข้อมูลแล้วคุณจะเห็นโฟลเดอร์ต่อไปนี้
co.th / MyCompany / MyProject / 1.2.3
คัดลอกทุกอย่างในโฟลเดอร์ libs ของคุณ (รวมถึงโฟลเดอร์ภายใต้. m2 / พื้นที่เก็บข้อมูล ) และคุณทำเสร็จแล้ว
บรรทัดคำสั่ง :
mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
ส่วนที่สำคัญในการพึ่งพาคือ: $ {pom.basedir} (แทนที่จะเป็นแค่ $ {basedir})
<dependency>
<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/lib/example.jar</systemPath>
</dependency>
ฉันคิดว่าทางออกที่ดีกว่าสำหรับปัญหานี้คือการใช้maven-install-pluginเพื่อติดตั้งไฟล์โดยอัตโนมัติในเวลาติดตั้ง นี่คือวิธีที่ฉันตั้งค่าสำหรับโครงการของฉัน
ก่อนอื่นให้เพิ่มพา ธ (ที่คุณเก็บ. jars ในเครื่อง) ไว้เป็นคุณสมบัติ
<properties>
<local.sdk>/path/to/jar</local.sdk>
</properties>
จากนั้นภายใต้plugins
เพิ่มปลั๊กอินเพื่อติดตั้งขวดเมื่อรวบรวม
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>1</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>com.local.jar</groupId>
<artifactId>appengine-api</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<file>${local.sdk}/lib/impl/appengine-api.jar</file>
</configuration>
</execution>
<execution>
<id>appengine-api-stubs</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>com.local.jar</groupId>
<artifactId>appengine-api-stubs</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<file>${local.sdk}/lib/impl/appengine-api-stubs.jar</file>
</configuration>
</execution>
</executions>
</plugin>
ในที่สุดในการพึ่งพาคุณสามารถเพิ่มขวด
<dependency>
<groupId>com.local.jar</groupId>
<artifactId>appengine-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.local.jar</groupId>
<artifactId>appengine-api-stubs</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
โดยการตั้งค่าโครงการของคุณเช่นนี้โครงการจะยังคงสร้างต่อไปแม้ว่าคุณจะนำไปใช้กับคอมพิวเตอร์เครื่องอื่น (เนื่องจากมีไฟล์ jar ทั้งหมดในเส้นทางที่ระบุโดยคุณสมบัติ local.sdk
)
สำหรับ groupId
ใช้ชื่อเฉพาะเพื่อให้แน่ใจว่าไม่มีข้อขัดแย้ง
ตอนนี้เมื่อคุณmvn install
หรือmvn test
ขวดท้องถิ่นจะถูกเพิ่มโดยอัตโนมัติ
วิธีที่ต้องการคือการสร้างที่เก็บระยะไกลของคุณเอง
ดูที่นี่สำหรับรายละเอียดเกี่ยวกับวิธีการทำ ดูที่ส่วน ' การอัปโหลดไปยังที่เก็บข้อมูลระยะไกล '
ฉันต้องการแชร์รหัสที่คุณสามารถอัปโหลดโฟลเดอร์ที่เต็มไปด้วยไห มันมีประโยชน์เมื่อผู้ให้บริการไม่มีที่เก็บสาธารณะและคุณต้องเพิ่มห้องสมุดจำนวนมากด้วยตนเอง ฉันตัดสินใจสร้าง. bat แทนการโทรโดยตรงไปยัง Maven เพราะอาจเป็นข้อผิดพลาดหน่วยความจำไม่เพียงพอ มันจัดทำขึ้นสำหรับสภาพแวดล้อม windows แต่ง่ายต่อการปรับให้เข้ากับระบบปฏิบัติการ linux:
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
public class CreateMavenRepoApp {
private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars";
public static void main(String[] args) throws IOException {
File directory = new File();
//get all the files from a directory
PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8");
writer.println("rem "+ new Date());
File[] fList = directory.listFiles();
for (File file : fList){
if (file.isFile()){
String absolutePath = file.getAbsolutePath() ;
Manifest m = new JarFile(absolutePath).getManifest();
Attributes attributes = m.getMainAttributes();
String symbolicName = attributes.getValue("Bundle-SymbolicName");
if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) {
String[] parts =symbolicName.split("\\.");
String artifactId = parts[parts.length-1];
String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);
String version = attributes.getValue("Bundle-Version");
String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
writer.println(mavenLine);
}
}
}
writer.close();
}
}
หลังจากรัน main นี้จาก IDE ใด ๆ ให้รัน update_repo_maven.bat
String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))
ดูเหมือนว่ารหัสของคุณจะระบุว่ารองรับไหที่กำหนดเองเท่านั้น นั่นไม่ใช่สิ่งที่เราต้องการ: แทนที่จะเป็นไหของบุคคลที่สาม คุณมีคำแนะนำวิธีการติดตั้งjar ใด ๆด้วยวิธีนี้หรือไม่?
นี่เป็นไวยากรณ์สั้น ๆ สำหรับเวอร์ชันที่ใหม่กว่า:
mvn install:install-file -Dfile=<path-to-file>
มันทำงานได้เมื่อ JAR ถูกสร้างโดย Apache Maven - กรณีที่พบบ่อยที่สุด จากนั้นจะมี pom.xml ในโฟลเดอร์ย่อยของไดเรกทอรี META-INF ซึ่งจะอ่านตามค่าเริ่มต้น
ที่มา: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
ดูที่ ...
<scope>compile</scope>
Maven อ้างอิง นี่เป็นค่าเริ่มต้น แต่ฉันได้พบในบางกรณีการตั้งค่าขอบเขตนั้นยัง Maven อย่างชัดเจนเพื่อค้นหาไลบรารีท้องถิ่นในที่เก็บภายในเครื่อง
ด้วยเหตุผลบางอย่างในโปรแกรมเว็บฉันให้การบำรุงรักษาเพื่อไม่แก้ปัญหา Alireza Fattahi ของมิได้แก้ปัญหา JJ โรมันทำงานได้อย่างถูกต้อง ในทั้งสองกรณีการรวบรวมจะไม่เป็นไร (เห็นขวด) แต่บรรจุภัณฑ์ไม่สามารถรวมขวดไว้ในสงครามได้
วิธีเดียวที่ฉันจัดการเพื่อให้มันทำงานได้โดยการวางขวด/src/main/webapp/WEB-INF/lib/
แล้วรวมกับโซลูชันของ Fattahis หรือ Roman
โปรดทราบว่าไม่จำเป็นต้องใช้ repo ในพื้นที่ ถ้าโปรเจ็กต์นี้ถูกแชร์กับผู้อื่นดังนั้นทุกคนจะมีปัญหาและคำถามเมื่อมันไม่ทำงานและ jar จะไม่สามารถใช้งานได้แม้ในระบบควบคุมแหล่งที่มาของคุณ!
แม้ว่า repo ที่แชร์นั้นเป็นคำตอบที่ดีที่สุดหากคุณไม่สามารถทำสิ่งนี้ได้ด้วยเหตุผลบางประการการฝัง jar นั้นดีกว่า repo ในพื้นที่ เนื้อหาซื้อคืนภายในเครื่องเท่านั้นอาจทำให้เกิดปัญหามากมายโดยเฉพาะเมื่อเวลาผ่านไป
บนพื้นที่เก็บข้อมูลในพื้นที่ของคุณคุณสามารถติดตั้ง jar ของคุณโดยใช้คำสั่ง
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
ตามลิงค์ที่มีประโยชน์นี้ เพื่อทำสิ่งเดียวกันจากเว็บไซต์ของ mkyoung นอกจากนี้คุณยังสามารถตรวจสอบคู่มือ Maven สำหรับเดียวกัน
ในการติดตั้ง jar ของบุคคลที่สามกรุณาโทรคำสั่งดังต่อไปนี้
mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path
- mvn ติดตั้ง
คุณสามารถเขียนโค้ดด้านล่างในบรรทัดคำสั่งหรือหากคุณใช้ eclipse builtin maven คลิกขวาที่โครงการ -> เรียกใช้เป็น -> เรียกใช้การกำหนดค่า ... -> ในแผงด้านซ้ายคลิกขวาบน Maven Build -> การกำหนดค่าใหม่ -> เขียน รหัสในเป้าหมาย & ในไดเรกทอรีฐาน: $ {project_loc: NameOfYourProject} -> Run
mvn install:install-file
-Dfile=<path-to-file>
-DgroupId=<group-id>
-DartifactId=<artifact-id>
-Dversion=<version>
-Dpackaging=<packaging>
-DgeneratePom=true
แต่ละที่อ้างถึง:
<path-to-file>: พา ธ ไปยังไฟล์ที่จะโหลดเช่น -> c: \ kaptcha-2.3.jar
<group-id>: กลุ่มที่ควรลงทะเบียนไฟล์ภายใต้เช่น -> com.google.code
<ifact-id>: ชื่อสิ่งประดิษฐ์สำหรับไฟล์เช่น -> kaptcha
<version>: เวอร์ชันของไฟล์เช่น -> 2.3
<Packaging>: บรรจุภัณฑ์ของไฟล์เช่น -> jar
2. หลังจากติดตั้งแล้วให้ประกาศ jar ใน pom.xml
<dependency>
<groupId>com.google.code</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3</version>
</dependency>
ขั้นตอนที่ 1:กำหนดค่าmaven-install-plugin
โดยมีเป้าหมายinstall-file
ในตัวคุณpom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>install-external-non-maven-jar-MWS-Client-into-local-maven-repo</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>com.amazonservices.mws</groupId>
<artifactId>mws-client</artifactId>
<version>1.0</version>
<file>${project.basedir}/lib/MWSClientJavaRuntime-1.0.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
</executions>
</plugin>
ตรวจสอบให้แน่ใจว่าได้แก้ไขfile
พา ธ ตามไฟล์พา ธ จริงของคุณ (แนะนำคือการวางไหภายนอกที่ไม่ใช่ maven เหล่านี้ไว้ในบางโฟลเดอร์สมมติlib
และวางlib
โฟลเดอร์นี้ไว้ในโครงการของคุณเพื่อที่จะใช้พา ธ สัมพัทธ์เฉพาะโครงการและหลีกเลี่ยงการเพิ่มระบบ เส้นทางสัมบูรณ์ที่เฉพาะเจาะจง
หากคุณมีขวดภายนอกหลายขวดให้ทำซ้ำ<execution>
สำหรับขวดอื่นภายในเดียวกันmaven-install-plugin
ภายในเดียวกัน
ขั้นตอนที่ 2:เมื่อคุณกำหนดค่าmaven-install-plugin
ตามที่แสดงด้านบนในpom.xml
ไฟล์ของคุณคุณต้องใช้ไหเหล่านี้ในของคุณpom.xml
ตามปกติ:
<dependency>
<groupId>com.amazonservices.mws</groupId>
<artifactId>mws-client</artifactId>
<version>1.0</version>
</dependency>
สังเกตว่า maven-install-plugin
เพียงสำเนาขวดภายนอกของคุณไปยังท้องถิ่น.m2
เก็บ mavenแค่นั้นแหละ. ไม่รวมไหเหล่านี้โดยอัตโนมัติในฐานะการอ้างอิง Maven กับโครงการของคุณ
มันเป็นประเด็นย่อย แต่บางครั้งก็พลาดง่าย
ฉันมีข้อผิดพลาดเดียวกันสำหรับชุดการพึ่งพาใน pom.xml ของฉันปรากฎว่าเวอร์ชันของการพึ่งพาไม่ได้ระบุไว้ใน pom.xml และถูกกล่าวถึงในที่เก็บพาเรนต์ ด้วยเหตุผลบางอย่างรายละเอียดเวอร์ชันไม่ได้ซิงค์กับ repo นี้ ดังนั้นฉันป้อนเวอร์ชันด้วยตนเองโดยใช้แท็กและทำงานได้เหมือนเครื่องราง ใช้เวลาเล็กน้อยในการค้นหาเวอร์ชันในพาเรนต์และระบุที่นี่ แต่สิ่งนี้สามารถทำได้สำหรับไหที่แสดงข้อผิดพลาดของวัตถุและใช้งานได้ หวังว่านี่จะช่วยใครซักคน
ใน Apache Maven 3.5.4 ฉันต้องเพิ่มเครื่องหมายคำพูดคู่ มันก็ไม่ได้ผลสำหรับฉัน
ตัวอย่าง: mvn ติดตั้ง: install-file "-Dfile = ตำแหน่งไปยังไฟล์ jar" "-DgroupId = group id" "-DartifactId = artifact id" "-Dversion = version" "-Dpackaging = ประเภทแพ็คเกจ"
yourproject
+- pom.xml
+- src
yourproject
+- pom.xml
+- src
+- repo
mvn deploy:deploy-file -Durl=file:///pathtoyour/repo -Dfile=your.jar -DgroupId=your.group.id -DartifactId=yourid -Dpackaging=jar -Dversion=1.0
mvn install:install-file -Dfile=/path-to-your-jar-1.0.jar -DpomFile=/path-to-your-pom-1.0.pom
<repositories>
<!--other repositories if any-->
<repository>
<id>project.local</id>
<name>project</name>
<url>file:${project.basedir}/repo</url>
</repository>
</repositories>
<dependency>
<groupId>com.groupid</groupId>
<artifactId>myid</artifactId>
<version>1.0</version>
</dependency>
คำตอบนี้มีไว้สำหรับผู้ใช้ ECLIPSE เท่านั้น:
หากคุณกำลังใช้ Eclipse วาง jar ใน lib / คลิกขวาที่ชื่อ jar และคลิก "add to build path" Eclipse จะสร้าง "ห้องสมุดอ้างอิง" และวางโถสำหรับคุณ
มันแก้ปัญหาการนำเข้า jar ทันทีในโปรแกรมสำหรับฉัน
.classpath
แต่งานสร้าง maven ของคุณmvn package
จะคร่าวๆเมื่อคุณเริ่มใช้การอ้างอิงนั้นเนื่องจาก maven ไม่มีคำจำกัดความและควรมีเฉพาะในpom.xml