Gradle初探(三):发布项目到Nexus资源库
2016-03-24 15:18
176 查看
4. 发布项目
在公司开发中,如果采取Maven这种项目构建方式的,一般都会架设一个Nexus Maven私服在公司服务器上,一些公司积累的资源组件和中央库没有提供的资源,以及一些项目都会发布到私服中,然后开发人员可以通过Maven在具体开发时导入内部资源。那么既然现在要用gradle替换Maven,那么这个需求则需要满足,通过查看官方文档,可以通过引入'maven-publish'实现。具体添加的配置如下:
.......
apply plugin: 'maven-publish'//添加Maven发布插件
.......
//上传资源配置
uploadArchives {
repositories {
mavenDeployer {
//上传资源到Maven私服
repository(url: "http://localhost:8081/nexus/content/repositories/releases/") {
authentication(userName:"admin",password:"admin123")
}
pom.version ="$project.version"
pom.artifactId ="$project.name"
pom.groupId ="$project.group"
}
}
}
通过添加以上配置,通过upload命令,已经可以把项目发布到我的本地私服http://localhost:8081/nexus/content/repositories/releases/中。但是问题又来了,这里我只能把项目发布到本地的releases库中,但是如果我这个项目还是dev版或者snapshot版怎么办?
这里就是体现gradle构建方式比maven灵活的地方。整个build.gradle文件其实就是一段groovy语言的代码。说到这里大家就都懂了吧,根据不同版本发布到不同的库,这不就是一个条件判断的事嘛。
将url提取为变量,加入相关判断代码,如下:
//默认发布到Maven Nexus私服的发行库
def nexusUrl ="http://localhost:8081/nexus/content/repositories/releases/"
//如果为快照版本发布到Maven Nexus私服的快照库
if(version.endsWith("-SNAPSHOT")) {
nexusUrl ="http://localhost:8081/nexus/content/repositories/snapshots/"
}
......
uploadArchives {
......
//上传资源到Maven私服
repository(url: nexusUrl) {
authentication(userName:"admin",password:"admin123")
}
......
}
好了,现在所有版本号为"-SNAPSHOT"的都会被发布到快照库,而其他的则会发布到发行库,现在执行下upload看下效果吧。。。。
图4.1 upload命令执行结果
图4.2 Nexus
图4.3 资源详情
另外,在引入了'maven-publish'后,如果配置了mavenLocal(),在upload时也会把资源提交到本地Maven资源库中。
图4.4 本地资源库
总结
几个小时的试玩,说明不了什么问题,但是gradle的灵活性确实还是让我印象深刻,非常能体现它约定优于配置的原则。但是如果要玩转它还需要学习一定的groovy语言。和程序猿都了解XML相比,这里有个时间成本。并且由于非常灵活,而很有可能出现配置的混乱,但是总体还是觉得利大于弊。写腻了配置XML的方式,在配置里写代码,想着都有趣。。。
在公司开发中,如果采取Maven这种项目构建方式的,一般都会架设一个Nexus Maven私服在公司服务器上,一些公司积累的资源组件和中央库没有提供的资源,以及一些项目都会发布到私服中,然后开发人员可以通过Maven在具体开发时导入内部资源。那么既然现在要用gradle替换Maven,那么这个需求则需要满足,通过查看官方文档,可以通过引入'maven-publish'实现。具体添加的配置如下:
.......
apply plugin: 'maven-publish'//添加Maven发布插件
.......
//上传资源配置
uploadArchives {
repositories {
mavenDeployer {
//上传资源到Maven私服
repository(url: "http://localhost:8081/nexus/content/repositories/releases/") {
authentication(userName:"admin",password:"admin123")
}
pom.version ="$project.version"
pom.artifactId ="$project.name"
pom.groupId ="$project.group"
}
}
}
通过添加以上配置,通过upload命令,已经可以把项目发布到我的本地私服http://localhost:8081/nexus/content/repositories/releases/中。但是问题又来了,这里我只能把项目发布到本地的releases库中,但是如果我这个项目还是dev版或者snapshot版怎么办?
这里就是体现gradle构建方式比maven灵活的地方。整个build.gradle文件其实就是一段groovy语言的代码。说到这里大家就都懂了吧,根据不同版本发布到不同的库,这不就是一个条件判断的事嘛。
将url提取为变量,加入相关判断代码,如下:
//默认发布到Maven Nexus私服的发行库
def nexusUrl ="http://localhost:8081/nexus/content/repositories/releases/"
//如果为快照版本发布到Maven Nexus私服的快照库
if(version.endsWith("-SNAPSHOT")) {
nexusUrl ="http://localhost:8081/nexus/content/repositories/snapshots/"
}
......
uploadArchives {
......
//上传资源到Maven私服
repository(url: nexusUrl) {
authentication(userName:"admin",password:"admin123")
}
......
}
好了,现在所有版本号为"-SNAPSHOT"的都会被发布到快照库,而其他的则会发布到发行库,现在执行下upload看下效果吧。。。。
图4.1 upload命令执行结果
图4.2 Nexus
图4.3 资源详情
另外,在引入了'maven-publish'后,如果配置了mavenLocal(),在upload时也会把资源提交到本地Maven资源库中。
图4.4 本地资源库
总结
几个小时的试玩,说明不了什么问题,但是gradle的灵活性确实还是让我印象深刻,非常能体现它约定优于配置的原则。但是如果要玩转它还需要学习一定的groovy语言。和程序猿都了解XML相比,这里有个时间成本。并且由于非常灵活,而很有可能出现配置的混乱,但是总体还是觉得利大于弊。写腻了配置XML的方式,在配置里写代码,想着都有趣。。。
相关文章推荐
- Gradle初探(二):build.gradle常用配置(java和web项目)
- python相关问题
- 正则表达式的学习二:正则表达式的匹配规则总结
- Asp.Net多线程用法1
- 启动AVD时候失败PANIC: ANDROID_SDK_HOME is defined but could not find Test.ini file in $ANDROID_SDK_HOME\.a
- Codeforces 306C White, Black and White Again (简单计数)
- unity工具IGamesTools之批量生成帧动画
- 蒲京博士为第七届环海南岛国际大帆船赛创造历史
- Android反挂钩技术-Java层
- Android--跑马灯
- linux下批量替换文件内容
- ListView适应ScrollView的效果
- 二维码URL自己主动辨别Android和ISO设备,以便扫码后倒入不同的下载链接
- [Unity3D]Unity3D游戏开发之自己主动寻路与Mecanim动画系统的结合
- 数字签名是什么?
- Gradle初探(一):创建一个Gradle项目
- 12小时格式Xcode的-在一个“TimePicker”24 NSDate的设置
- java ClassNotFoundException和NoClassDefFoundException的差别
- 25.NSURLSession的使用
- 堆与栈的区别