一、 公司的项目上传到公司私服
-
使用idea中maven的install将项目打包,放到本地仓库
-
install三个关键步骤:
- 将项目打包成jar包放到项目的target目录下(这一步等同于mvn package命令的操作)
- 将jar包install到idea中配置的本地仓库中
- 将pom文件install到idea中配置的本地仓库中,在其他项目使用jar包时能够通过pom文件加载本jar包的maven依赖
-
idea中配置了本地仓库的地址,就不会再使用idea中指定的settings.xml配置文件中指定的本地仓库地址
-
-
使用idea中maven的deploy将项目打包,发布到私服
-
deploy四个关键步骤
- 将项目打包成jar包放到项目的target目录下(这一步等同于mvn package命令的操作)
- 将jar包install到idea中配置的本地仓库中
- 将pom文件install到本地仓库中,在其他项目使用jar包时能够通过pom文件加载本jar包的maven依赖
- 上传本地jar包和pom文件到私服
-
deploy本地jar包到私服需要的配置
-
在父工程pom文件中指定私服的位置
<distributionManagement> <repository> <!--自己定义仓库id,需要和settings.xml配置文件中server标签中的id对应--> <id>lx-releases</id> <!--仓库名称,仓库的描述--> <name>releases repository</name> <!--仓库地址--> <url>http://XXXX.com/repository/maven-releases/</url> </repository> <snapshotRepository> <id>lx-snapshots</id> <name>snapshots repository</name> <url>http://XXXX.com/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
注意:
-
配置了私服的releases仓库和snapshots仓库,上传的时候maven怎么知道本地jar包传到哪个仓库?
-
私服中的仓库有相关的属性,本地如果是release版本传到私服release仓库,本地如果是snapshot版本传到私服snapshot仓库。下图是私服的可视化页面
-
项目pom.xml文件中指定了jar包是release版本还是snapshot版本
-
-
-
子工程pom文件指定父工程pom就可以自动依赖父工程deploy的配置,这样就每个子工程就不需要单独添加deploy配置
<parent> <artifactId>项目artifactId</artifactId> <groupId>项目groupid</groupId> <version>1.0-SNAPSHOT</version> </parent>
-
发布jar包到私服,如果私服需要认证,就需要配置私服的账户密码,为了防止因为代码泄漏或者代码开源导致私服的账户密码泄漏,所以将私服的账户密码配置在本地maven的settings.xml文件中
<servers> <server> <id>lx-public</id> <username>admin</username> <password>password</password> </server> <server> <id>lx-releases</id> <username>admin</username> <password>password</password> </server> <server> <id>lx-snapshots</id> <username>admin</username> <password>password</password> </server> </servers>
注意:
- settings.xml配置文件中server标签中的id要和pom.xml文件中repository中的id对应
-
-
使用命令的方式发布本地jar包到本地
-
如果不想在pom文件中指定私服url,可以在settings.xml中指定私服相关的配置,使用maven命令发布jar包到私服,命令中指定settings.xml中的配置
-
不喜欢用命令部署,配置略
-
-
二、 第三方的jar包上传到公司私服
-
上传jar包到私服命令
-
通用命令
mvn deploy:deploy-file -DgroupId=<group-id> \ -DartifactId=<artifact-id> \ -Dversion=<version> \ -Dpackaging=<type-of-packaging> \ -Dfile=<path-to-file> \ -DrepositoryId=<id-to-map-on-server-section-of-settings.xml> \ -Durl=<url-of-the-repository-to-deploy>
-
命令说明
-Dmaven.test.skip:表示跳过测试
-DgroupId=com.pt.poseidon:表示jar包所属的groupId
-DartifactId=poseidon-api:表示jar包的artifactId
-Dfile=D:\xxx\poseidon-common-1.0.0.jar:表示jar包所在本地文件的路径
-Durl=http://【username:password】@仓库地址:如果需要认证则需要username和password
-
举例
mvn -X deploy:deploy-file -Dmaven.test.skip=true -DgroupId=com.pt.poseidon -DartifactId=poseidon-api -Dversion=1.0.0 -Dpackaging=jar -Dfile=D:\com\pt\poseidon\poseidon-api\1.0.0\poseidon-api-1.0.0.jar -DpomFile=D:\com\pt\poseidon\poseidon-api\1.0.0\poseidon-api-1.0.0.pom -Durl=http://admin:City_app123$@私服仓库地址
-
注意:
-
如果私服仓库需要认证,可以在-Durl中直接指定用户名和密码
-
私服仓库必须是hosted类型的才支持上传jar包,如果选了非hosted类型的仓库,deploy回报405异常
-
私服仓库类型
-
hosted:托管仓库,可以将第三方依赖放到这个仓库
可以设置release版本、snapshot版本存放不同版本的jar包
-
proxy:代理存储库,指定被代理的仓库,项目优先从代理仓库获取依赖,如果代理仓库不存在需要的依赖,则从被代理仓库获取,并保存到当前代理仓库,减少项目和被代理仓库的网络带宽和时间开销
-
group:可以组合多个仓库,对外提供统一访问路径
-
-
-
-
同时上传pom文件
-
如果第三方jar包,默认会自动生成一个通用的pom,如果不需要自动生成pom文件,需要配置如下:
-DgeneratePom=false
-
如果第三方jar包存在pom文件,需要上传到私服
-DpomFile=pom文件所在本地路径 # 案例 -DpomFile=D:\com\ls\pt\commons-collections\3.2.1\commons-collections-3.2.1.pom
-
-
常见异常
-
本地jar文件找不到问题
-
错误信息
Caused by: org.apache.maven.plugin.MojoFailureException: Cannot deploy artifact from the local repository: D:\repository\XXX
-
解决办法
- 方法1:jar包如果放在本地仓库,上传到私服的时候报如下错误,可以将jar包拷贝到本地仓库外面进行上传
- 方法2:或者将需要上传的jar包拷贝到maven的lib目录下
-
-
405错误
-
错误信息
Caused by: org.apache.maven.plugin.MojoExecutionException: Failed to deploy artifacts: Could not transfer XXX from/to remote-repository (http://XXX@XXX): Transfer failed for http://XXX 405 PUT
-
解决方案
将上传仓库地址改为hosted类型仓库地址
-
-
401错误
-
错误信息
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact com.pt.poseidon:poseidon-api:jar:1.0.0 from/to remote-repository (http://XXX/repository/maven-releases/): Transfer failed for http://XXX 401 Unauthorized
-
解决方案
没有认证,在请求地址前面加上私服的用户名和密码
-Durl=http://admin:password$@私服仓库url
-
-