首先,待暴露的服务有要求,去掉pom.xml中的spring-boot-maven-plugin插件的依赖;
具体原因待查资料 ???
2)执行mvn install 命令,这时模块就会出现在maven的本地仓库了,
3)其它项目在pom.xml中引入依赖
操作完你会发现,当你修改了模块的代码重新install之后,依赖此模块的地方代码自动改变。当然,如果你的方法变动较大(已被其它项目依赖),比如本来原方法没有入参改成有入参,那么依赖你模块的地方惨了(会报错)。所以,但凡需要修改功能,要兼容老接口,最好是新增接口或方法重载,弃用旧接口(升级接口的情况)
待补充学习:mvn deploy命令
以下内容待实验验证:
mvn deploy:deploy-file
-DgroupId=com.xy.oracle -DartifactId=ojdbc14
-Dversion=10.2.0.4.0
-Dpackaging=jar
-Dfile=E:\ojdbc14.jar
-Durl=http://localhost:9090/nexus-2.2-01/content/repositories/thirdparty/
-DrepositoryId=thirdparty
必选参数是这3个:-Dfile=E:\ojdbc14.jar
-Durl=http://localhost:9090/nexus-2.2-01/content/repositories/thirdparty/
-DrepositoryId=thirdparty
-Durl 是公司私服地址
-Dfile 是要保留的服务jar包
-DrepositoryId 映射setting.xml中的中的元素,用来认证权限
例如:
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>
-Dpackaging 打包类型,需要与-Dfile统一
maven发布自己的jar到私服
1、如果有密码:
在maven的settings.xml中,设置如下,一般要设置两个server,一个是正式库,一个是快照库(开发阶段使用,由于maven正式库是按版本判断新旧)
<servers>
<server>
<id>releases-lingoace</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots-lingoace</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
2、pom.xml
<!-- 配置私服,版本号后有-SNAPSHOT的,会被maven识别为上传到快照库 -->
<distributionManagement>
<repository>
<id>releases-lingoace</id>
<name>lingoace releases repository</name>
<url>https://xxxxx/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots-lingoace</id>
<name>lingoace snapshots repository</name>
<url>https://xxxxx/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
3、执行如下命令:
mvn clean deploy -X -Dmaven.test.skip=true即可。
如果发布成功会出现BUILD SUCCESS的字样。查看仓库https://xxxxx/repository/maven-snapshots已经包含了相应的包
注意点:
- 必须配置快照库
- 版本号后有-SNAPSHOT的,会被maven识别为上传到快照库
- RELEASE库不允许上传SNAPSHOT的jar
- 如果是spring项目,上传jar不允许与引用此jar的项目有相同的Bean
- 前提在快照库,jar提供方修改代码后,只需要在根项目下执行mvn install命令;jar使用方的代码就会被同步。这就是使用maven方便的地方啊
发布到私服错误示例:
错误1:
Failed to dispatch transfer event 'PUT PROGRESSED https:///xxxx.jar <> /Users/edz/IdeaProjects/xxxxxxxx' to org.apache.maven.cli.transfer.ConsoleMavenTransferListener
java.lang.IllegalArgumentException: progressed file size cannot be greater than size: 61865984 > 58945141
原因:在多模块项目中,在父pom.xml中写发布配置,并在父目录下执行mvn deploy会报上述错误
解决办法:在要上传的模块的pom.xml中写发布配置,并在要上传模块目录下执行mvn deploy命令
错误2:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on project ama-api: Failed to deploy artifacts: Could not transfer artifact xxxx:xxxxx:jar:1.0-20210513.103051-1 from/to snapshots-lingoace (https://xxxxxx/repository/maven-snapshots/): Transfer failed for https://xxxxxx/repository/maven-snapshots/com/lingoace/edu/ama-api/1.0-SNAPSHOT/ama-api-1.0-20210513.103051-1.jar 413 Request Entity Too Large
原因:因为用了nginx代理,而nginx默认文件大小有限,所以需要设置nginx上传文件大小限制
解决方法:去nginx设置大小,然后重启nginx
client_max_body_size 200M;
参考文章
Maven打包项目到私服
maven deploy上传文件到私服踩坑
史上最全搭建MAVEN私服上传并使用JAR包教程
MAVEN多模块,父项目POM发布到MAVEN私服