目录
与部分厂家业务合作时经常需要使用对方提供的第三方jar包调取定制化接口或者实现进行业务开发,jar包的管理与部署只靠人工维护是很困难的,尤其是团队合作的情况下每个人在本地单独维护一份lib,最后的结果往往是依赖管理杂乱无章。一般公司都会有自己的Maven私服,把第三方jar包上传到私服上团队成员根据需要添加pom依赖不仅可以缩短工程初始化时间,依赖管理也会相对容易、规范。将第三方依赖推向公司私服一共分两个步骤:
问题背景
公司Maven私服部署的是Artifactory,开发完的utils、tools或者其他工具包可以直接发布或者通过网页直接上传到私服,但是这次接收的第三方包比较复杂:
整个包并没有生成第三方包的信息,只有阿里云依赖包的信息。上传到私服以后识别出来的GAV坐标也是错误的:
起初的想法是在第三方jar包外面包装一个中间层并发布到私服,这样做的好处是即使有一天第三方jar包更新了我们仅需重新发布一次即可,下游依赖方无感知只要刷新一次maven就能完成更新。
基于上述想法编写如下pom:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycorp.algo</groupId> <artifactId>profile-feature</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.corpname.profile</groupId> <artifactId>partner-utils</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${basedir}/lib/partner-profile.jar</systemPath> </dependency> </dependencies> <distributionManagement> <snapshotRepository> <id>snapshots</id> <name>libs-snapshot</name> <url>http://artifactory.mycorp.com:8081/artifactory/libs-snapshot-local</url> </snapshotRepository> </distributionManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
发布过程中不论使用shade还是assambly都无法将scope为system的第三方依赖打入到最外层jar中。正常的私服发布过程使用的都是GAV坐标,为了实现上述想法需要将第三方jar包先部署到本地maven仓库目录生成pom文件,然后在外层jar包发布到私服时使用shade插件打包成shade jar。
本地安装
进入第三方依赖jar包所在目录通过mvn install进行部署:
w3sun@w3sundembp > ~/maven > pwd /Users/w3sun/maven w3sun@w3sundembp > ~/maven > ls partner-utils.jar w3sun@w3sundembp > ~/maven > mvn install:install-file \ > -DgroupId=com.corpname.profile \ > -DartifactId=partner-utils \ > -Dversion=1.0.0 \ > -Dpackaging=jar \ > -Dfile=partner-utils.jar [INFO] Scanning for projects... [INFO] [INFO] ------------------< org.apache.maven:standalone-pom >------------------- [INFO] Building Maven Stub Project (No POM) 1 [INFO] --------------------------------[ pom ]--------------------------------- [INFO] [INFO] --- maven-install-plugin:2.4:install-file (default-cli) @ standalone-pom --- [INFO] Installing /Users/w3sun/maven/partner-utils.jar to /Users/w3sun/.m2/repository/com/corpname/profile/partner-utils/1.0.0/partner-utils-1.0.0.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.476 s [INFO] Finished at: 2020-07-15T17:17:32+08:00 [INFO] ------------------------------------------------------------------------
进入到/Users/w3sun/.m2/repository/com/corpname/profile/partner-utils/1.0.0/目录可以发现已经生成pom文件,将提取的GVA坐标加入到发布中间层jar依赖的pom中:
可以看到External Libraries下已经加入了第三方jar包依赖。
私服发布
将中间层jar包profile-feature发布到私服时需要maven shade插件以便生成shade jar:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4</version> <executions> <execution> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin>
添加完插件执行deploy进行发布:
发布成功切maven私服可查,多人合作进行业务开发时对于公共依赖只需要引入中间层jar包的GAV坐标即可。
转载请注明:雪后西塘 » 发布第三方jar包到Maven私服