针对远程仓库没有的jar包,应该如何引入与打包?
1、deploy到远程仓库
申请账号与权限,使用mvn deploy
命令发布到远程仓库或者是私有仓库。
1、在Maven的conf/settings.xml
文件配置远程仓库的认证信息
<settings><!-- 配置远程仓库的认证信息(以id标签为标识) --><servers><server><id>nexus</id><username>your-nexus-username</username><password>your-nexus-password</password></server></servers>
</settings>
3、使用deploy命令发布到远程仓库
mvn deploy:deploy-file \
-DgroupId=com.dist.model \
-DartifactId=dist-model-api \
-Dversion=1.0.0-SNAPSHOT \
-Dpackaging=jar \
-Dfile=/Users/laizhenghua/Downloads/jar/dist-model-api-1.0.0-SNAPSHOT.jar \
-Durl=http://10.60.10.38:8081/repository/maven-releases \
-DrepositoryId=nexus
这种方式是比较推荐的,所有的依赖都在远程仓库上进行管理,其他人使用时直接添加GAV坐标即可,无需添加额外的配置,非常简单与方便。
2、install到本地仓库
mvn install:install-file \
-Dmaven.repo.local=/Users/laizhenghua/soft/maven/repository \
-DgroupId=com.dist.engine \
-DartifactId=dist-engine-material \
-Dversion=5.0.9-SNAPSHOT \
-Dpackaging=jar \
-Dfile=/Users/laizhenghua/Downloads/jar/dist-engine-material-5.0.9-SNAPSHOT.jar# 命令参数说明
# -Dmaven.repo.local 本地仓库位置
# -DgroupId gav坐标信息的g
# -DartifactId gav坐标信息的a
# -Dversion gav坐标信息的v
# -Dpackaging 文件类型
# -Dfile 文件
install
到本地后,也是添加GAV坐标就能在当前工程引入此依赖,但是这种方式协同开发不方便,其他人也要用到此依赖时,也需要拿到jar包后,在本地手动install一下,无法做到共享。
3、通过idea的Add as Library引入
在当前工程新建lib目录,将第三方的sdk或jar包都放到此目录下,如
在通过idea的Add as Library...
功能就能引入第三方的SDK或者是jar包,如下图
但是这种方式也有弊端,比如其他人接手此项目时,也得手动Add as Libraty...
不太方便。
4、基于3的改进通过Maven配置引入
方式3有一定的局限性,我们希望其他人接手项目时,不需要做任何改动也能正常引入所有依赖正常启动项目。
1、Maven引入指定目录的jar,即读取本地的jar
<!--
1.新增scope和systemPath标签
2.${project.basedir}就是当前工程目录
-->
<dependency><groupId>com.dist.sdk</groupId><artifactId>sdk-api</artifactId><version>5.0.8-SNAPSHOT</version><scope>system</scope><systemPath>${project.basedir}/lib/sdk-api-5.0.8-SNAPSHOT.jar</systemPath>
</dependency>
2、增加打包扫描的配置,否则打包时不会将scope=system的依赖打进去。
<plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--增加这个配置--><configuration><skip>true</skip><includeSystemScope>true</includeSystemScope></configuration><executions><execution><phase>none</phase></execution></executions></plugin>
</plugins>
详见下图
3、打jar包发布运行时,仍然没有把scope=system的依赖打进去,就需要新增如下配置
<resources><resource><directory>src/main/resources</directory></resource><!--jar包添加第三方lib--><resource><directory>${project.basedir}/lib</directory><targetPath>BOOT-INF/lib/</targetPath><includes><include>*.jar</include></includes></resource>
</resources>
4、打war包时需要通过插件配置指定lib目录才行,如
<!--war包添加第三方lib-->
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><configuration><webResources><resource><directory>${project.basedir}/lib</directory><targetPath>WEB-INF/lib/</targetPath><includes><include>**/*.jar</include></includes></resource></webResources></configuration>
</plugin>