mvn deploy命令上传jar包
maven 上传 jar 包到 nexus 私服,分为两种场景:通过源码打包上传、已有jar包上传
1. 通过源码打包上传
1.1 配置 maven 的 settings.xml 文件
在 settings.xml 文件中配置2个 server,并输入 nexus 的用户名和密码。
<servers> <server> <id>release</id> <username>admin</username> <password>******</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>******</password> </server> </servers>
1.2 在 idea 里,配置项目的 pom.xml 文件
在 idea 里,打开项目的 pom.xml 文件,配置 distributionManagement,包括 id 和 nexus 的url
注意:这里的 id 要与 settings 文件配置的 server id 相同,程序会通过id去匹配 仓库地址的用户名、密码。 否认执行 deploy 命令会报 status code 401 的异常,意思的安全认证不通过。
<distributionManagement> <repository> <id>release</id> <url>http://ip:port/仓库地址/</url> </repository> <snapshotRepository> <id>snapshots</id> <url>http://ip:port/仓库地址/</url> </snapshotRepository> </distributionManagement>
1.3 执行 deploy 命令
在 idea 中,有两种方式执行 depoly 命令。
(1)在 Idea 下面的 Terminal 窗口,确认当前执行路径是项目的根目录,执行命令:mvn deploy 会把当前项目的所有模块都会打包上传。
(2)在 Idea 右侧的 Maven 窗口,找到要打包上传的模块,打 Lifecycle 下,找到 deploy 命令,点击执行,会上传当前所属的模块。
2. 上传已有的 jar
另外一种场景,手里拿到了其他部门或公司开发的 jar 包,并不打算放到 thirdparty、central 这2个仓库里。想上传到 releases 或 snapshots 仓库里。
解决办法有两种:
2.1 登录服务器,手动上传
第一种比较直接,如果可以登录到 nexus 私服的服务器上,手动 nexus 下的 storage 目录下,在仓库中手动创建jar包路径,手动上传就可以了。
2.2 通过 deploy 命令上传
主要讲的就是第二种办法,只知道仓库地址、用户名、密码,没有权限登录服务。
2.2.1 配置 maven 的 settings.xml 文件
在 settings.xml 文件中配置2个 server,并输入 nexus 的用户名和密码。
为什么还要配置 settings.xml ? 因为 mvn deploy 命令不方便直接指定用户名和密码。 否认执行 deploy 命令会报 status code 401 的异常
<servers> <server> <id>release</id> <username>admin</username> <password>******</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>******</password> </server> </servers>
2.2.2 在 idea 中执行 deploy 命令
为什么还要在 Idea 中执行命令? 因为 Idea 中可以配置Maven环境变量,用于指定读取上面我们配置好的 settings.xml 文件。如果使用 命令提示符,会报 Plugin not found in any plugin repository 等异常。
执行命令如下:
mvn deploy:deploy-file -Dfile=D:/file/test-1.0-RELEASES.jar -DpomFile=D:/file/test-1.0-RELEASES.pom -Dpackaging=jar -Durl=http://ip:port/仓库地址/ -DrepositoryId=release
命令解释:
mvn deploy:deploy-file 是命令名
-Dfile= 用于指定 jar 所在的位置,绝对路径、相对路径都是支持的,只要能找到指定文件即可。建议把要上传的jar放到一个简单的目录下。
-DpomFile= 用于指定 pom 文件所在位置。
-Dpackaging= 要上传的文件类型,jar 或 pom 。上传 jar 包时,-Dfile和-DpomFile 都要填写;只上传 pom 文件,只需要填写 -DpomFile
-Durl= 要上传的 nexus 仓库地址,snapshots 的jar要上传到snapshots仓库, releases的jar 要上传到 release仓库。如果类型不匹配会报 status code 400 异常。
-DrepositoryId= 指定使用哪个仓库id,要与 settings.xml 文件中的 server id 相同。匹配不到 id 的话,也会报 status code 405 异常。
jar包上传成功后,会解析pom文件,自动识别 jar 包的存储路径的。