分發構件至遠程倉庫
mvn install 會將項目生成的構件安裝到本地Maven倉庫,mvn deploy 用來將項目生成的構件分發到遠程Maven倉庫。本地Maven倉庫的構件只能供當前用戶使用,在分發到遠程Maven倉庫之后,所有能訪問該倉庫的用戶都能使用你的構件。
我們需要配置POM的distributionManagement來指定Maven分發構件的位置,如下:
Maven項目的POM中,環境配置<distributionManagement>負責管理構件的發布。
1.<distributionManagement>的基本配置
- <distributionManagement>
- ...
- <downloadUrl>http://jcat.ericsson.org/my-project</downloadUrl>
- <status>deployed</status>
- </distributionManagement>
- downloadUrl,一個URL,其他Maven項目可以通過該URL下載並引用當前Maven項目的構件。注意區別本文下面的<repository>中的URL,<repository>中的URL給出了當前Maven項目的構件的發布URL。
- status,當前Maven項目的狀態,可用的狀態如下所示。注意,該值是由Maven自動設置,永遠不要人工設置。
- none,未指明狀態,默認值
- converted,該Maven項目的構件已經被轉換為兼容Maven 2
- partner,該Maven項目的構件保持與另一個庫的Maven版本一致
- deployed,該Maven項目的構件是通過Maven 2或Maven 3發布的,最常用的值
- verified,該Maven項目的構件已經被驗證過
2.<distributionManagement>的<repository>配置
給出Maven部署當前項目的構件到遠程庫時,關於遠程庫的配置。示例如下:
- <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>
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. <distributionManagement>的<relocation>配置
隨着一個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>