最新消息:天气越来越冷,记得加一件厚衣裳

发布第三方jar包到Maven私服

Maven w3sun 2240浏览 0评论

与部分厂家业务合作时经常需要使用对方提供的第三方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私服

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址