实战:Maven和Gradle项目如何上传Jar包到Nexus私有仓库?手把手教你配置权限、凭证和发布命令 上一篇我们成功搭建了Nexus私有仓库也搞懂了代理仓库、宿主仓库、仓库组三种类型的区别。今天我们来点真格的——把代码打成的Jar包真正推送到Nexus上。Maven和Gradle都提供了推送Jar到远程仓库的专属命令但在执行命令之前需要先完成两项配置Nexus仓库地址URL告诉工具往哪传访问认证凭证告诉Nexus你是谁这两样配好了一条命令Jar包就乖乖上去了。今天这篇文章我们就分别用Maven和Gradle项目完整走一遍从创建用户到配置凭证再到执行上传的全过程。一、Nexus用户与权限配置别用admin账号这是底线在实际生产环境你绝对不会把Nexus的管理员账号admin分给开发人员。正确的做法是创建专门的普通用户只给它上传Jar包所需的最小权限。1. 创建用户登录Nexus后台进入Security → Users点击“Create user”。填写基本信息ID比如deployerFirst/Last Name随意Email按需填写Password设置密码Status选“Active”2. 创建角色并分配权限Nexus的权限划分非常细。最佳实践是先创建角色给角色分配必要的权限再把角色赋给用户。点击“Create role”选择“Nexus role”。给角色起个名字比如maven-upload-role。然后从权限列表里勾选对应仓库的add权限上传对应仓库的browse权限浏览对应仓库的edit权限编辑对应仓库的delete权限删除只给“完成任务必需的权限”不多给一分。保存角色后回到用户页面把这个角色分配给刚才创建的用户。现在我们有了一个专门用于上传Jar包的Nexus账号。后续Maven和Gradle都会用这个账号的凭证来认证。二、Gradle项目配置maven-publish插件一行命令推上去1. 引入插件Gradle本身不支持直接推送Jar到Maven格式仓库需要添加maven-publish插件apply plugin: maven-publish刷新Gradle项目插件就生效了。2. 配置publishing块在build.gradle中配置publishing块。它有两个子块publications定义要上传什么文件repositories定义上传到哪个仓库、用什么凭证publishing { publications { maven(MavenPublication) { artifact(build/libs/my-app-$version.jar) { extension jar } } } repositories { maven { name nexus url http://你的NexusIP:8081/repository/maven-snapshots/ credentials { username project.repoUser password project.repoPassword } } } }注意credentials里的username和password是从project.repoUser和project.repoPassword读取的。这俩变量不能直接写在build.gradle里因为build.gradle要提交到Git明文写密码是绝对不行的。3. 安全存储凭证gradle.properties在项目根目录创建gradle.properties文件这个文件应该加入.gitignorerepoUserdeployer repoPassword你的密码然后在build.gradle中通过project.repoUser、project.repoPassword读取。4. 执行上传先构建项目生成Jar包gradle build再执行发布命令gradle publish成功后去Nexus的Browse Components页面进入maven-snapshots仓库就能看到上传的Jar包了。三、Maven项目配置distributionManagement用deploy命令上传1. 配置仓库地址在pom.xml中添加distributionManagement块指定要上传的Nexus仓库地址distributionManagement snapshotRepository idnexus-snapshots/id urlhttp://你的NexusIP:8081/repository/maven-snapshots//url /snapshotRepository /distributionManagement如果是正式发布版本release可以再配一个releaseRepository。这里的id很重要它要和后面凭证配置中的ID保持一致。2. 配置凭证settings.xmlMaven的凭证不写在pom.xml里而是放在用户目录的.m2/settings.xml中。打开~/.m2/settings.xml没有就新建添加settings servers server idnexus-snapshots/id usernamedeployer/username password你的密码/password /server /servers /settings注意id必须和pom.xml中的id完全一致否则Maven匹配不到凭证会报认证失败。3. 执行上传先构建项目mvn package再执行部署命令mvn deploy成功后去Nexus的Browse Components页面也能看到上传的Jar包。Nexus会自动按照groupId生成树形结构同一个项目的多个版本会放在一起。四、总结两种工具配置对比配置项GradleMaven核心配置文件build.gradlegradle.propertiespom.xml~/.m2/settings.xml仓库地址配置publishing.repositories.maven.urldistributionManagementsnapshotRepositoryurl凭证配置gradle.propertiesproject.属性~/.m2/settings.xmlserver上传命令gradle publishmvn deploy插件/扩展maven-publish内置deploy生命周期写在最后Maven和Gradle虽然配置方式不同但核心逻辑是一样的告诉工具仓库在哪URL告诉仓库我是谁凭证执行命令把东西推上去安全方面核心原则就一条凭证不进代码库。Gradle用gradle.propertiesMaven用~/.m2/settings.xml都是本地存储不会提交到Git。