将代码推送至Nexus Maven仓库时遇部署错误求助
解决Maven Deploy到Nexus的依赖部署问题
我来帮你搞定这个Maven部署到Nexus的问题!你现在碰到的新错误,核心是Maven试图把你的API依赖的第三方jar也上传到Nexus,但这些根本不是你要部署的产物,而且你的Nexus仓库大概率不允许上传第三方库,或者权限设置不对。下面一步步来解决:
1. 给第三方依赖设置正确的Scope
你的项目是给其他插件调用的核心API,那些像Spigot这类的运行依赖,应该由依赖你的插件自己去引入,所以得把这些依赖的scope改成provided:
打开你的pom.xml,找到所有第三方运行依赖,修改成这样:
<dependency> <groupId>org.spigotmc</groupId> <artifactId>spigot-api</artifactId> <version>1.20.1-R0.1-SNAPSHOT</version> <scope>provided</scope> <!-- 加上这行,告诉Maven这个依赖不用打包部署 --> </dependency>
provided的意思是:这个依赖在运行环境里已经有了,Maven只在编译你的代码时用它,不会把它打包进你的产物,也不会尝试上传到Nexus。把所有不属于你自己开发的依赖都这么改就行。
2. 给Pom.xml加上部署仓库配置
你得明确告诉Maven要把你的API部署到Nexus的哪个仓库,在pom.xml里加上这段配置:
<distributionManagement> <repository> <id>nexus</id> <!-- 这个id必须和你settings.xml里server的id完全一致 --> <name>Nexus正式版仓库</name> <url>http://192.168.0.145/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>nexus</id> <!-- 同样要匹配settings里的server id --> <name>Nexus快照版仓库</name> <url>http://192.168.0.145/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement>
注意哦,你之前用的http://192.168.0.145/nexus/content/groups/public是仓库组,用来下载依赖的,不能用来上传,上传得用具体的release或snapshot仓库地址。
3. 检查Settings.xml的配置匹配度
你的settings.xml里的配置基本没问题,但要确认两点:
servers里的id是nexus,和上面pom里的仓库id完全一致,这样Maven才能用你配置的admin账号密码去Nexus认证。- 登录Nexus后台确认admin账号有release和snapshot仓库的部署权限,不然会报权限错误。
4. 重新执行Deploy命令
把上面的配置改完后,先清理一下项目,再执行部署:
mvn clean deploy
另外,你之前碰到的第一个错误,大概率是因为没加distributionManagement配置,Maven不知道要往哪部署,现在配置好应该就解决了。
内容的提问来源于stack exchange,提问作者Matthew Parks




