Gradle之恋(11)-依赖管理3

概述

继上文,依赖管理的话题分为两个层面的含义:把需要的依赖加入项目的class path以便顺利地构建项目;把项目构建成其他项目的依赖,发布出去。本文就来研究下如何发布构件。
Gradle

任务定义构件

你可以使用任务来定义构件,如

task myJar(type: Jar)

artifacts {
archives myJar
}

如我们经常会把源码一起发布,可以这样来做

task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}

artifacts {
archives sourcesJar
}

文件定义构件

你也可以使用文件来定义一个构件,如

def someFile = file('build/somefile.txt')

artifacts {
archives someFile
}

也可以自定义各种属性

task myTask(type:  MyTaskType) {
destFile = file('build/somefile.txt')
}

artifacts {
archives(myTask.destFile) {
name 'my-artifact'
type 'text'
builtBy myTask
}
}

甚至可以使用map的方式来自定义属性

task generate(type:  MyTaskType) {
destFile = file('build/somefile.txt')
}

artifacts {
archives file: generate.destFile, name: 'my-artifact', type: 'text', builtBy: generate
}

发布到Ivy仓库

使用插件来发布构件,你不需要告诉Gradle如何发布构件,只需告诉它发布到哪里即可,可以通过配置任务uploadArchives。

uploadArchives {
repositories {
ivy {
credentials {
username "username"
password "pw"
}
url "http://repo.mycompany.com"
}
}
}

配置后,你只需要执行“gradle uploadArchives”,Gradle就会自动构建、打包、生成ivy.xml并上传至仓库。

发布到Maven仓库

发布到Maven仓库需要使用maven插件,配置雷同

apply plugin: 'maven'

uploadArchives {
repositories {
mavenDeployer {
//发布到maven本地文件
repository(url:"file://localhost/tmp/maven-rpo/")

//发布到maven远程仓库
repository(url: "http://nexus.zhaiqianfeng.com:8081/nexus/content/repositories/thirdparty/") {
authentication(userName: "admin", password: "admin123")
}
}
}
}

发布到Maven本地仓库

uploadArchives{
repositories{
mavenLocal()
}
}

当然你可以发布到更多的仓库,只需配置uploadArchives.repositories。下一篇我们将一起对依赖管理做个实战案例。

翟前锋 wechat
欢迎订阅我的微信公众号:zhaiqianfeng!