Maven匯入本地jar包
軟體專案管理和釋出工具Maven給java的開發帶來了很多的方便。需要引用其他jar包的時候只需要在pom.xml新增相關的依賴,maven就會自動解析依賴、下載jar包,更新jar包也只需要修改version欄位,大大簡化了jar包的引用。但是有時候我們要用的某幾個包在maven上不存在,只能下載jar包到本地並新增到java專案中,然而問題隨之而來:maven只能打包pom.xml裡面宣告的依賴,不能識別本地jar包。本文介紹3種把本地jar包新增到pom.xml的方式。
1、 在本地maven倉庫安裝本地jar包
maven install可以把指定的檔案安裝到本地maven倉庫(使用maven指令前需要安裝apache maven)。有三種install方式:
(1)mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
指定jar包、groupid、artifactId和version,maven會自動生成相應的pom.xml檔案。
(2)mvn install:install-file -Dfile=<path-to-file> -DpomFile=<path-to-pomfile>
如果jar包是用maven打包生成的,可以直接指定jar包和pom.xml檔案。
(3)mvn install:install-file -Dfile=<path-to-file>
如果jar包是用maven打包生成的,maven 2.5版本會自動根據jar包生成pom.xml檔案。
下面按照方法(1)給出一個例子,方法(2)和(3)類似:
首先建立兩個專案:LocalJarforMavenDemo(Maven專案),LocalJar(普通java專案)。
(1)LocalJar新增一個類:
public class MethodOne {
public void method(){
System.out.println("method in MethodOne called.");
}
}
(2)LocalJar打包:localjar-1.0.0.jar,在windows命令視窗輸入mvn install指令:mvn install:install-file -Dfile=LocalJar.jar -DgroupId=nlp -DartifactId=localjar -Dversion=1.0.0 -Dpackaging=jar
安裝成功後,在.m2/repository資料夾裡可以看到jar包和pom.xml檔案。
(3)LocalJarforMavenDemo專案的pom.xml新增localjar-1.0.0.jar包:
<dependency>
<groupId>nlp</groupId>
<artifactId>localjar</artifactId>
<version>1.0.0</version>
</dependency>
成功匯入包後,就可以引用localjar-1.0.0.jar包裡的類了:
/**
* Created by Alex on 2017/1/15.
*/
public class TestLocalJar {
private static Logger logger = LoggerFactory.getLogger(TestLocalJar.class);
public void testMethod(){
logger.info("testMethod in TestLocalJar");
MethodOne methodOne = new MethodOne(); //localjar-1.0.0.jar的類
methodOne.method();
}
}
2、把本地jar包放在專案的某個目錄中
把本地jar包放在專案的某個目錄中,就可以在pom.xml中引用該jar包了。在專案中構建目錄,pom.xml新增reposiroty和dependency:
<repositories>
<repository>
<id>localrepository</id>
<url>file://${basedir}/repo</url>
</repository>
</repositories>
<dependency>
<groupId>nlp</groupId>
<artifactId>localjar</artifactId>
<version>1.0.0</version>
</dependency>
3、使用scope system依賴
和方法2類似,pom.xml新增dependency,但不需要新增。這種方法可能出現奇怪的錯誤,所以不推薦使用。
<dependency>
<groupId>nlp</groupId>
<artifactId>localjar</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/repo/nlp/localjar/1.0.0/LocalJar.jar</systemPath>
</dependency>