有时我们需要将本地的jar文件添加到maven项目中,如果直接通过IDEA添加本地库引用的话,打包时候会丢失。网上中文教程的解决方法非常复杂,自己调查了一下,希望有此问题的同行不用再走弯路。
相关文章:
秒懂Java序列化与反序列化
秒懂 Java注解类型(@Annotation)
秒懂Java多线程
首先确定你的电脑已经安装了Maven。在命令行中键入mvn -v
命令,如果出现类似如下图所示,说明你的电脑已经安装了Maven,可进行第二步,如果没有请安装Maven。
安装jar到本地仓库
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
: 要安装的JAR的本地路径
:要安装的JAR的Group Id
: 要安装的JAR的 Artificial Id
: JAR 版本
: 打包类型,例如JAR
NOTE:最好在
pom.xml
文件所在的目录运行上述命令,个人经验不在根目录运行有时会安装不成功
使用,例如我安装了百度推送JAR到本地,我就可以在pom.xml
文件中这样引用它了
<dependency>
<groupId>com.baidu.appgroupId>
<artifactId>bdpushartifactId>
<version>3.0.1version>
dependency>
总结:这种方法弊端较大,程序的可维护性以及移植性较低。例如当你改变本地Maven仓库时需要重新安装。如果引用此JAR
的项目是多人协调工作的项目,则每个人都要将其安装在自己的本地仓库。
可以将此JAR
文件放在工程的根目录下,让其随着项目走,然后在pom.xml
文件中使用maven-install-plugin在Maven初始化阶段完成安装。
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-install-pluginartifactId>
<version>2.5version>
<executions>
<execution>
<phase>initializephase>
<goals>
<goal>install-filegoal>
goals>
<configuration>
<groupId>com.baidu.appgroupId>
<artifactId>bdpushartifactId>
<version>3.0.1version>
<packaging>jarpackaging>
<file>${basedir}/lib/bdpush-3.0.1.jafile>
configuration>
execution>
executions>
plugin>
我使用IDEA上面的代码是可以工作的,如果你们使用Eclipse报错的话,加入如下代码
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2egroupId>
<artifactId>lifecycle-mappingartifactId>
<version>1.0.0version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojogroupId>
<artifactId>aspectj-maven-pluginartifactId>
<versionRange>[1.0,)versionRange>
<goals>
<goal>test-compilegoal>
<goal>compilegoal>
goals>
pluginExecutionFilter>
<action>
<execute />
action>
pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>
org.apache.maven.plugins
groupId>
<artifactId>
maven-install-plugin
artifactId>
<versionRange>
[2.5,)
versionRange>
<goals>
<goal>install-filegoal>
goals>
pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>falserunOnIncremental>
execute>
action>
pluginExecution>
pluginExecutions>
lifecycleMappingMetadata>
configuration>
plugin>
plugins>
pluginManagement>
下面是我在IDEA中使用SpringBoot
时候的配置
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<executions>
<execution>
<phase>initializephase>
<goals>
<goal>install-filegoal>
goals>
<configuration>
<groupId>com.baidu.appgroupId>
<artifactId>bdpushartifactId>
<version>3.0.1version>
<packaging>jarpackaging>
<file>${basedir}/lib/bdpush-3.0.1.jarfile>
configuration>
execution>
executions>
plugin>
${basedir}
表示pom.xml
文件所在的目录
第二种方法比较粗暴简单,具体为将依赖设置为系统域,通过完全路径引用。例如要引用的JAR
文件在
下,那么使用如下方法添加依赖
<dependency>
<groupId>com.baidu.appgroupId>
<artifactId>bdpushartifactId>
<version>3.0.1version>
<scope>systemscope>
<systemPath>${basedir}/lib/bdpush-3.0.1.jasystemPath>
dependency>
${basedir}
表示pom.xml
文件所在的目录,例如你的JAR
文件在D盘下的jarLibs
里面,就将${basedir}
替换为“D:/jarLibs”即可。note: 这种方法我自己在
SpringBoot
项目中打包成war
文件时,没有成功打包到里面
第三种方案与第一种差不多,不同的是JAR
文件被安装在一个单独的仓库里。这个本地仓库建在你项目的根目录下,随着项目走。
例如
1:我们在${basedir}(pom.xml
文件所在路径)目录下建立一个叫“maven-repository”的本地仓库。
2:使用如下命令安装我们要引用的JAR
到此仓库中
mvn deploy:deploy-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=jar -Durl=file:./maven-repository/ -DrepositoryId=maven-repository -DupdateReleaseInfo=true
3:在pom.xml
中如下使用
申明仓库
<repositories>
<repository>
<id>maven-repositoryid>
<url>file:///${project.basedir}/maven-repositoryurl>
repository>
repositories>
然后添加引用
<dependency>
<groupId>com.baidu.appgroupId>
<artifactId>bdpushartifactId>
<version>3.0.1version>
dependency>