在开发过程中,我们需要制作自己的jar供其他项目使用。这时我们可以把jar上传到nexus这类私有仓库,在其他项目使用时,通过私有仓库自动下载。那如何打包的发布到nexus仓库呢?以下对发布到私有仓库的简要记录。
一、配置
需要配置仓库地址和上传时操作的用户和密码。
- 项目配置
在项目pom.xml配置,上传仓库地址,注意点,需要配置maven-releases
,不能是maven-public
, 否则会报nexus status code: 405, reason phrase: PUT (405)
错
<distributionManagement>
<repository>
<id>maven-public</id>
<name>maven-public</name>
<url>http://10.220.99.55:8081/repository/maven-releases/</url>
</repository>
</distributionManagement>
- maven配置
在settings.xml中配置,上传的用户名和口令
<servers>
<server>
<id>maven-public</id>
<username>your username</username>
<password>your password</password>
</server>
</servers>
二、发布到远程仓库
- 命令方式
mvn deploy
如果你不想在 pom.xml 文件中配置,可以在 Maven 命令行使用 -DaltDeploymentRepository 参数指定仓库的 URL。
mvn deploy -DaltDeploymentRepository=your-repo-id::default::https://your.repository.url
- idea面板方式
在右边maven面板的生命周期,中选择相应模块的devlop. (注这种方式需要在项目pom.xml配置好上传仓库地址)
三、碰到问题
- 自己生成的jar,在项目使用时,不能自动下载jar内引用的依赖,即依赖不会传递,原因是在pom.xml中,引用了本地jar依赖,导致自己生成的jar被使用时,不会下载依赖jar,如以下
<dependency>
<groupId>org.rxtx</groupId>
<artifactId>rxtxcomm</artifactId>
<version>2.2pre2</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/RXTXcomm.jar</systemPath>
</dependency>
- deploy到远程仓库,成功发布后,在使用时无法从远程下载到本地仓库。
- 项目的pom.xml,有使用到
<parent>
元素,引用了父pom, 这里需要把父pom也发布到远程仓库。
<parent>
<groupId>com.xxxx</groupId>
<artifactId>xxx-xx</artifactId>
<version>1.0.0</version>
</parent>