发布构件到Maven仓库的几种方案比较
1、Maven 原生发布方式
- mvn deploy : 直接通过pom.xml文件中定义的版本和服务器信息,将构件发布到服务器
- mvn deploy:deploy-file :指定某个文件作为版本发布,但是一次只能发布一个jar文件,不适合多项目结构的maven工程。可以通过参数的方式覆盖pom.xml文件的配置
mvn deploy:deploy-file -Dfile=/opt/pr****n/*-ommon/*ommon-base/target/**-mon-base-2.0.0-SNAPSHOT.jar -DrepositoryId=nexus-snapshots -DgroupId=a -DartifactId=b -Dversion=1.0.0 -Durl=file:/opt/repository/aaa/
- 参考文档:
https://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html
https://maven.apache.org/plugins/maven-deploy-plugin/
2、Maven插件方式(maven-release-plugin)
-
pom.xml文件中安装 maven-release-plugin 插件
-
对插件内容进行配置
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.5.3</version> <configuration> <!--git用户名--> <!--suppress UnresolvedMavenProperty --> <username>${username}</username> <!--git密码--> <!--suppress UnresolvedMavenProperty --> <password>${password}</password> <!--mvn目标指令--> <goals>-f pom.xml deploy</goals> </configuration> </plugin>
-
同时需要在pom.xml中配置git 或 svn地址
<scm> <!--release包需要放入的nexus或者其他maven release包的仓库url地址--> <url>http://********/repository/maven-releases/</url> <!--connection, developerConnection: 都是连接字符串,其中后者是具有write权限的scm连接 --> <!--需要打包项目的git地址--> <developerConnection>scm:git:http://*********/****-common.git</developerConnection> <!--需要打包项目的git地址--> <connection>scm:git:http://*********/****-common.git</connection> <tag>HEAD</tag> </scm>
-
执行命令进行发布,也可回滚
mvn release:prepare -Dusername=username -Dpassword=password mvn release:perform -Dusername=username -Dpassword=password
-
此种方式的问题:
- 有多步交互,会要求创建代码仓库的tag
- 发布过程要求输入release版本
- 要求指定新的snapshot版本
- 会在服务器上创建snapshot 分支
3、通过gradle插件(Maven Publish Plugin)
- 只适用于gradle项目
- 参考文档:https://docs.gradle.org/current/userguide/publishing_maven.html