maven/gradle 打包后自动上传到nexus仓库
前提:
nexus的相关repository必须设置允许redeploy,参考下图:

maven项目:
pom.xml中增加以下节点:
<distributionManagement>
<repository>
<id>nexus-3rd</id>
<url>http://localhost:8081/nexus/content/repositories/thirdparty/</url>
</repository>
</distributionManagement>
一般上传到nexus,为了方便他人查看源码,也会上传源码包,建议在build/plugins节点里再增加以下节点,以便自动生成源码jar包
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
上传到nexus时是需要身份验证的,所以还要在$M2_HOME/conf/settings.xml里添加以下内容:
<servers>
<server>
<username>admin</username>
<password>admin123</password>
<id>nexus-3rd</id>
</server>
</servers>
注意:这里的id必须与pom.xml中distributionManagement/repository/id保持一致。
最后一步,执行mvn命令:
mvn deploy -Dmaven.test.skip=true
后面的-Dmaven.test.skip=true意为跳过单元测试,可以酌情删减,顺利的话,以输出中会看到类似内容:
...
Uploading: http://localhost:8081/nexus/content/repositories/thirdparty/xxx/xxx.jar
Uploaded: http://localhost:8081/nexus/content/repositories/thirdparty/xxx/xxx.jar (29582 KB at 18829.7 KB/sec)
...
gradle项目:
group 'my-company'
version '1.0'
def artifactId = "my-artifact" apply plugin: 'java'
apply plugin: 'maven' ... //打包源代码
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
} artifacts {
archives sourcesJar
} ... //如果希望gradle install,安装到.m2本地仓库,参考下面的内容
install {
repositories.mavenInstaller {
pom.version = "$project.version"
pom.artifactId = "$artifactId"
pom.groupId = "$project.group"
}
} //上传到nexus
uploadArchives {
repositories {
mavenDeployer {
repository(url: "http://localhost:8081/nexus/content/repositories/thirdparty") {
authentication(userName: "admin", password: "admin123")
}
pom.version = "$project.version"
pom.artifactId = "$artifactId"
pom.groupId = "$project.group"
}
}
}
然后gradle upload即可
不同分支(环境)的管理问题:
实际开发中,不同的环境通常会对应不同的git分支,比如:开发环境对应dev分支,测试环境对应test分支,生产环境对应master分支,dev环境测试通过后,合并到test分支,test分支完成后合并到master分支。
但是这样有一个问题,nexus上的repository并没有区分环境,如果程序员A在日常开发中,把dev分支的artifact上传到了nexus,而部署人员在构建test环境的项目,这时从nexus上取到的就是dev环境里的东西,造成混乱,这里提供2种思路:
1)每个环境都搭一套nexus,各个环境完全隔离
优点:好管理,如果每个环境都通过统一的部署机器构建发布,结合host配置,可以将url也统一固定,只需要各环境部署机上的host配置好就行。
缺点:有点浪费资源
2)nexus只有一套,repository建多个,比如
http://localhost:8081/nexus/content/repositories/thirdparty_dev
http://localhost:8081/nexus/content/repositories/thirdparty_test
http://localhost:8081/nexus/content/repositories/thirdparty_prod
这样相对比较节省资源一点,gradle中可以这样配置:
def env = System.getProperty("env") ?: "local"
uploadArchives {
repositories {
mavenDeployer {
repository(url: "http://localhost:8081/nexus/content/repositories/thirdparty_$env") {
authentication(userName: "admin", password: "admin123")
}
pom.version = "$project.version"
pom.artifactId = "$artifactId"
pom.groupId = "$project.group"
}
}
}
然后gradle upload -Denv=dev 即可
另外:考虑到maven项目本机缓存的特性,建议在开发阶段将版本号设置成SNAPSHOT,正式发布时,再去掉SNAPSHOT。详情可见园友文章:理解Maven中的SNAPSHOT版本和正式版本
maven/gradle 打包后自动上传到nexus仓库的更多相关文章
- Gradle 打包上传至私有仓库配置
allprojects{ apply plugin: 'java' apply plugin: 'idea' apply plugin: 'maven' group 'com.xxxxx.base' ...
- maven项目打包后war文件丢失配置文件
使用maven package打包项目时出现配置文件丢失的现象,此类问题解决办法如下: 在web项目pom.xml 文件中添加如下: 在<build>标签中添加如下配置: <reso ...
- maven无法加载本地jar包以及maven项目打包后本地jar包没有打进项目的问题解决办法
1.首先设置依赖项,这样maven就会把该路径下的jar包导入项目引用 <dependency> <groupId>DPSDK-Manager</groupId> ...
- gradle 打包后第三方登录不上
使用 gradlew clean assembleReleaseChannels 生成不用的渠道包后 第三方登录不上 原因:打包未设置好APP的 .keystore
- 如何使用Gradle的maven-publish将jar包或者war包上传到nexus仓库
首先,在build.gradle里边声明依赖maven-publish插件: apply plugin: 'maven-publish' 然后,配置项目的信息和和nexus的信息: publishin ...
- Maven实战(十)利用 Nexus 来构建企业级 Maven 仓库
目录 一.简介 Nexus是Maven仓库管理器,用来搭建一个本地仓库服务器,这样做的好处是便于管理,节省网络资源,速度快,还有一个非常有用的功能就是可以通过项目的SNAPSHOT版本管理,来进行模块 ...
- (十二)maven之nexus仓库的基本用法
nexus仓库的基本用法 ① 启动nexus. 上一章有提到:https://www.cnblogs.com/NYfor2018/p/9079068.html ② 访问http://localhost ...
- Maven之搭建本地私服(nexus)仓库
摘要:现在越来越多的项目都在使用Maven管理项目,尤其是在大型的项目团队中使用Maven能带来更加多的好处,私服的好处我相信大家都明白,在这里我就不多说了,它最重要的作用就是可以让项目团队成员更加方 ...
- 使用gradle插件发布项目到nexus中央仓库
目录 简介 Gradle Nexus Publish Plugin历史 插件的使用 Groovy DSL Kotlin DSL 插件背后的故事 总结 简介 Sonatype 提供了一个叫做开源软件资源 ...
随机推荐
- ASP.NET Core 中文文档 第二章 指南 (09) 使用 Swagger 生成 ASP.NET Web API 在线帮助测试文档
原文:ASP.NET Web API Help Pages using Swagger 作者:Shayne Boyer 翻译:谢炀(kiler) 翻译:许登洋(Seay) 对于开发人员来说,构建一个消 ...
- Bloom Filter:海量数据的HashSet
Bloom Filter一般用于数据的去重计算,近似于HashSet的功能:但是不同于Bitmap(用于精确计算),其为一种估算的数据结构,存在误判(false positive)的情况. 1. 基本 ...
- IOS学习之-私人通讯录
通过一段时间IOS的学习完成了一个简单的应用,"私人通讯录". 运行效果如下图: 1.登录页 2.通讯录列表 3.添加 4.编辑 5.删除 6.注销 总视图结构如下图: 总结本程序 ...
- 成吨提高开发效率:Intellij Shortcuts精简子集与思维模式
在线精简cheatsheet备查表:intellij.linesh.twGithub项目:intellij-mac-frequent-keymap Intellij的快捷键多而繁杂,从官方推荐的key ...
- Nancy之实现API的功能
0x01.前言 现阶段,用来实现API的可能大部分用的是ASP.NET Web API或者是ASP.NET MVC,毕竟是微软官方出产的,用的人也多. 但是呢,NancyFx也是一个很不错的选择.毕竟 ...
- ASP.NET Core Kestrel部署HTTPS
ASP.NET Core配置 Kestrel部署HTTPS.现在大部分网站已经部署HTTPS,大家对于安全越来越重视. 今天简单介绍一下ASP.NET Core 部署HTTPS,直接通过配置Kestr ...
- 跨平台日志清理工具 Log-Cutter v2.0.1 正式发布
Log-Cutter 是JessMA开源组织开发的一个简单实用的日志切割清理工具.对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能.如果用手工方 ...
- Django简介和安装
Django 最开源地方就是可以使用强大第三方插件1,Django默认没有提供对象(Object)级别的权限控制,我们可以通过该Django Guardian 扩展来帮助Django实现对象级别的权限 ...
- linux使用wkhtmltopdf报错error while loading shared libraries:
官网提示 linux需要这些动态库.depends on: zlib, fontconfig, freetype, X11 libs (libX11, libXext, libXrender) 在li ...
- js判断窗体或容器滚动条到底部
NO1---jquery判断窗体滚动条到底部 $(window).scroll(function () {if ($(window).scrollTop() >= $(document).hei ...