Maven pom的distributionManagement配置方式
作者:码灵
Maven pom的distributionManagement配置方式
distributionManagement的作用是"分发构件至远程仓库"。
mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库。
本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。
我们需要配置POM的distributionManagement来指定Maven分发构件的位置。
<distributionManagement>的作用:负责管理构件的发布。这是一个环境变量。
1.构件的发布
Maven项目的POM中,环境配置<distributionManagement>负责管理构件的发布。
<distributionManagement> ... <downloadUrl>http://jcat.ericsson.org/my-project</downloadUrl> <status>deployed</status> </distributionManagement>
<downloadUrl> URL </downloadUrl> 其它的Maven项目可以通过该URL下载并引用当前Maven项目的构件。
<status> 当前Maven项目的状态。
可用的状态有以下几种:
none
:未指明状态,默认值converted
:该Maven项目的构件已经被转换为兼容Maven 2partner
:该Maven项目的构件保持与另一个库的Maven版本一致deployed
:该Maven项目的构件是通过Maven 2或Maven 3发布的,最常用的值verified
:该Maven项目的构件已经被验证过
2.推送仓库设置(常用)
2.1 <distributionManagement>中的<repository> <snapshotRepository>
<distributionManagement> <repository> <uniqueVersion>false</uniqueVersion> <id>corp1</id> <name>Corporate Repository</name> <url>scp://repo/maven2</url> <layout>default</layout> </repository> <snapshotRepository> <uniqueVersion>true</uniqueVersion> <id>propSnap</id> <name>Propellors Snapshots</name> <url>sftp://propellers.net/maven</url> <layout>legacy</layout> </snapshotRepository> ... </distributionManagement>
- <uniqueVersion>指定是否产生一个唯一性的version number还是使用address里的其中version部分.(true or false)
- <id> 库的id
- <name> 库的名称
- <url> 库的url
- <layout> default或者legacy
2.2 <distributionManagement> 中的 <repository> 和 <snapshotsrepository>各自的含义
maven仓库分为两种 release发布仓库(<repository>) 和 snapshot快照仓库(<snapshotsrepository>)。
snapshot
快照仓库用于保存开发过程中的不稳定版本。release
正式仓库用来保存稳定的发行版本。
定义一个组件/模块为快照版本 只需要在pom文件中的该模板的版本号后面加上 -SNAPSHOT就可以了。 注意:必须是大写。
maven会根据模块的版本号(pom文件中的<version>版本号</version>)中是否带有-SNAPSHOT来判断这个是快照版本还是正式版本。
如果是快照版本:
- 在mvn deploy时会自动发布到快照版本库中。
- 而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。
如果是正式发布版本:
- 那么在mvn deploy时会自动发布到正式版本库中。
- 而使用正式版本的模块,在不更改版本号的情况下,编译打包时,如果本地已经存在该版本的模块则使用本地的而不是主动去镜像服务器上下载。
3.部署网站和文档
<distributionManagement>的<site>配置,除了部署当前Maven项目的构件,还可以部署当前Maven项目的网站和文档。
示例如下:
<distributionManagement> ... <site> <id>mojo.website</id> <name>Mojo Website</name> <url>scp://beaver.codehaus.org/home/projects/mojo/public_html/</url> </site> ... </distributionManagement>
4.重命名构件
随着一个Maven项目的发展壮大,该Maven项目的构件可能需要重新发布到新的库。
<relocation>可以将当前Maven项目以新的构件的形式发布到另一个库。
<distributionManagement> ... <relocation> <groupId>org.apache</groupId> <artifactId>my-project</artifactId> <version>1.0</version> <message>We have moved the Project under Apache</message> </relocation> ... </distributionManagement>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。