gradle uploadarchives 配置找不到上传哪里

&nbsp&#8250&nbsp&nbsp&#8250&nbsp
Gradle之依赖管理
8.1.&What is dependency management?何谓?为何?依赖管理大致有两块:首先Gradle需要找到你工程需要的东西,这些东西就是所谓的“依赖”。另外Gradle需要构建和上传你工程的产出,这就是所谓的发行。让我们来仔细看看它们:大
部分工程都不太可能完全自给自足,一把你都会用到其他工程的文件。比如我工程需要Hibernate就得把它的类库加进来,比如测试的时候可能需要某些额
外jar包(jdbc驱动或者Ehcache
jar包)。这些文件就是工程的依赖。Gradle需要你告诉它工程的依赖是什么,它们在哪,然后帮你加入构建中。依赖可能需要去远程库下载,比如
Maven 或者 Ivy 库。也可以是本地库,甚至可能是另一个工程。我们称这个过程叫“依赖解决”(dependency resolution).通常情况下,依赖本身也有依赖。比如Hibernate核心库就依赖一些其他类库。当Gradle测试你工程的时候,它也需要找到这些间接依赖。我们称之为“传递依赖”(&transitive dependencies).大部分工程构建的主要目的是脱离工程使用。比如生成jar包,包括源代码、文档等,然后发布出去。这些个玩意构成了项目的发行内容。Gradle也会替你分忧这个工作。你声明了要发行,Gradle会构建并且发行。你可能会把文件拷贝到本地某处,或者上传到远程&Maven 或 Ivy 库,甚至在其他项目里使用。整个这个都是所谓的发行。8.2.&Declaring your dependencies依赖声明我们看一下简单的依赖声明脚本:Example&8.1.&Declaring dependenciesbuild.gradleapply&plugin:&'java'
repositories&{
&&&&mavenCentral()
dependencies&{
&&&&compile&group:&'org.hibernate',&name:&'hibernate-core',&version:&'3.6.7.Final'
&&&&testCompile&group:&'junit',&name:&'junit',&version:&'4.+'
是在搞毛?这段脚本说的是:1,工程在编译时需要Hibernate core
3.6.7.Final。这样Hibernate核心库和它的依赖库都会引入。2,测试的时候需要4.0以上版本的junit。另外就是这些包都要从
Maven central 库里查找。接下来咱们详细看下。8.3.&Dependency configurations依赖配置Gradle的依赖会分组为“配置”(configurations)&。一个配置就是一套具名依赖,称为“依赖配置”。你可以声明外部依赖,后面我们会看到。Java插件定义了一些标准配置,形成了插件本身的类路径库。下面列一下,你可以自己去这看:.compile该依赖对于编译发行是必须的。runtime该依赖对于运行时是必须的,默认包含编译时依赖。testCompile该依赖对于编译测试是必须的,默认包含编译产品依赖和编译时依赖。testRuntime该依赖对于测试是必须的,默认包含编译、运行时、测试编译依赖。定制化配置请看:&8.4.&External dependencies外部依赖依赖类型有多种,现在说一种外部依赖(external dependency)。这种依赖的对象不在工程内,甚至是在远程库里。定义外部依赖需要如下加入到依赖配置:Example&8.2.&Definition of an external dependencybuild.gradledependencies&{
&&&&compile&group:&'org.hibernate',&name:&'hibernate-core',&version:&'3.6.7.Final'
}外部依赖使用group,&name&和version&属性。根据使用库的不同,group&和version可能是可选的。有一种快捷方式声明依赖:Example&8.3.&Shortcut definition of an external dependencybuild.gradledependencies&{
&&&&compile&'org.hibernate:hibernate-core:3.6.7.Final'
}更多信息请看&.8.5.&Repositories库Gradle是咋定位外部依赖呢?答案是“库”(repository)。一个库其实就是一大堆文件,不过是用group,&name&和version组织好的。Gradle支持很多库,比如&Maven 和Ivy;还只存多种方式连接到库,比如本地系统或者 HTTP.Gradle默认没定义库。你使用前需要至少定义一个,比如Maven central 库:Example&8.4.&Usage of Maven central repositorybuild.gradlerepositories&{
&&&&mavenCentral()
}或者远程Maven 库:Example&8.5.&Usage of a remote Maven repositorybuild.gradlerepositories&{
&&&&maven&{
&&&&&&&&url&&/maven2&
}或者远程 Ivy 库:Example&8.6.&Usage of a remote Ivy directorybuild.gradlerepositories&{
&&&&&&&&url&&/repo&
}你可以自己建个库然后指定:Example&8.7.&Usage of a local Ivy directorybuild.gradlerepositories&{
&&&&&&&&//&URL&can&refer&to&a&local&directory
&&&&&&&&url&&../local-repo&
}工程里可以制定多个库,Gradle会依序查找,一旦找到就停止。更多信息请看&.&8.6.&Publishing artifacts发布文件依赖配置也用来发布文件,这些文件称为“发布文件”(publication artifacts),或干脆就叫“发件”(artifacts)(不会翻译,谁来纠正一下。。)一般的,插件会做很多发件定义工作,所以我们不用干什么。不过需要告诉Gradle发件要发布到哪里。方法是把库附在&uploadArchives&任务里。比如我们要发布到远程Ivy库:Example&8.8.&Publishing to an Ivy repositorybuild.gradleuploadArchives&{
&&&&repositories&{
&&&&&&&&ivy&{
&&&&&&&&&&&&credentials&{
&&&&&&&&&&&&&&&&username&&username&
&&&&&&&&&&&&&&&&password&&pw&
&&&&&&&&&&&&}
&&&&&&&&&&&&url&&&
}现在你执行&gradle uploadArchives, Gradle就会构建并上次你的Jar包,同时生成并上传一个ivy.xml&文件.可以发布到Maven 库,语法有一点点不同。记住要使用Maven插件不然发布不过去。这样Gradle会生成并上传pom.xml文件。Example&8.9.&Publishing to a Maven repositorybuild.gradleapply&plugin:&'maven'
uploadArchives&{
&&&&repositories&{
&&&&&&&&mavenDeployer&{
&&&&&&&&&&&&repository(url:&&file://localhost/tmp/myRepo/&)
}更多关于发布的信息请看&.原文地址&转载网址 &
上一篇: 转载: http://my.oschina.net//blog/358141 新项目中,使用了Google I/O 2013发布的新工具,使用Gradle构建android项目,并且在新版的Intellig IDEA以及google的Android Studio对其支持。本文就介绍一下怎么使用gradle构建android项目,进行多个版
下一篇: Android Studio 简介 几天前的晚上突然又想使用 Android Studio,结果竟然把之前无法攻克的问题全都解决了,包括之前很困扰的第三方开源库的引入问题,现在也都很轻松了,所以 eclipse 的工作几乎都可以转移过去。并且试用了一晚上,比 eclipse强大多了! 看gradle-bintray-upload项目地址:简介:Android Studio 上传 Library 库到 JCenter 的脚本更多:&&&&&&&&&标签:
bintray.gradle:发布到 JCenter 的脚本
build.gradle:配置项目根目录下的发布插件
gradle.properties:在 bintray.gradle 中使用到的属性配置文件
local.properties:账号信息等私人数据
1.修改项目根目录下的 build.gradle 文件
参考本项目的,修改项目里的 build.gradle(注意是项目不是库),增加以下两个 dependencies:
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
2.修改 Library 下的 build.gradle 文件
在 build.gradle 文件底部添加以下代码:
apply from: '/venshine/gradle-bintray-upload/master/bintray.gradle'
如果提示:Gradle sync failed: Software caused connection abort: recv failed。替换上面的内容为以下代码:
apply from: 'http://git.oschina.net/venshine/gradle-bintray-upload/raw/master/bintray.gradle'
3.配置 gradle.properties 文件
参考本项目下的文件,对以下内容替换为自己的信息:
PROJ_GROUP=com.mon
PROJ_VERSION=1.0.3
PROJ_NAME=AndroidCommon
PROJ_WEBSITEURL=/venshine/AndroidCommon
PROJ_ISSUETRACKERURL=/venshine/AndroidCommon/issues
PROJ_VCSURL=/venshine/AndroidCommon.git
PROJ_DESCRIPTION=Android Common Library
PROJ_ARTIFACTID=AndroidCommon
LICENSE_NAME='The Apache Software License, Version 2.0'
LICENSE_URL='http://www.apache.org/licenses/LICENSE-2.0.txt'
DEVELOPER_ID=venshine
DEVELOPER_NAME=venshine
DEVELOPER_@
4.配置 bintray 帐号信息
参考本项目下的文件,对以下内容替换为自己的信息:
bintray.user=your_bintray_user_name
bintray.apikey=your_bintray_api_key
bintray.gpg.password=your_pgp_password
bintray.oss.user=your_maven_central_user_name
bintray.oss.password=your_maven_central_password
5.执行命令
项目根目录下执行以下命令将库发布到。
gradlew install
gradlew bintrayUpload
6.Add to Jcenter
登录网站,去自己的仓库首页,找到该库,点击 Add to JCenter 按钮,然后发送消息,等待审核结果,一般几个小时的时间就会审核通过。以后再更新项目上传到 Bintray 就不需要再次审核了。maven私服搭建及gradle上传 - 简书
maven私服搭建及gradle上传
声明:文章为原创,转载请注明。文章中代码部分已上传到Github,传送门在文章末尾。
本次的搭建是在ubuntu系统上进行的,windows搭建过程类似。
此次搭建我们用到了JDK及nexus(sonatype的软件,不是google的手机)
JDK (我用的版本所1.7.0_76)
NEXUS (我用的所nexus-2.12.0-01,在官网下载即可,我下载了nexus-2.12.0-01-bundle.zip
这个我就不写了,一搜一大堆。
NEXUS安装:
把下载的nexus-2.12.0-01-bundle.zip放到/usr/local目录下(你也可以放到其它目录)
为了减去不必用的麻烦,我建议现在开始使用你的su权限。命令行:sudo su会让你输入密码确认,确认后进入超级权限。
解压压缩文件。命令行:unzip nexus-2.12.0-01-bundle.zip 解压文件得到 nexus-2.12.0-01文件及sonatype-work文件夹。我们现在只关心nexus-2.12.0-01文件夹。
存放位置-超级命令-解压.jpg
软连接为了操作方便,我们给这个比较长名字的文件夹建个软连接(好比所Windows的快捷方式),命令行: ln -s nexus-2.12.0-01 nexus2
运行nexus我们进入到nexus2指向的文件夹下命令行:cd nexus2 启动nexus命令行:./bin/nexus start失败了,没运行起来。如图,好纠结,一面让我们run as root,一面又不建议我们这样。
软连接-运行需要root提示.jpg
设置RUN_AS_USER=root那我们按照它的指示设置RUN_AS_USER=root命令行:vi ./bin/nexus
vi设置run_as_root.jpg
VI编辑器不熟悉的话,可以用你熟悉的方式修改,不会不丢人- -!
再次运行启动命令如果看到命令行提示了Started Nexus OSS,说明我们成功了。访问下试试:
如图,我们已经成功运行。
提示run_as_root-成功运行.jpg
成功运行.jpg
我遇到一个情况是这样的,已经提示我“Started Nexus OSS”。但是浏览器访问不到。这时我尝试再次使用命令启动nexus。仍然提示我“Started Nexus OSS”。如果你也遇到这种情况就注意了,现在是有问题的,服务没起来。如果起来了,再次启动会提示“Nexus OSS is already running.”我经过排查发现是因为我系统的JAVA环境不对,没有装Oracle的JDK,而是使用了自带的OpenJDK(具体版本忘了,特别声明,有的OpenJDK版本是可以让nexus正常运行的),那你就去装下Oracle的JDK吧。
点击右上角的"Log In",默认用户名密码所admin/admin123。
登录后,点击右侧菜单栏Views/Respositories-&Respositories,将会看到下图几个仓库。
默认的仓库-步骤2.jpg
我们可以看到这些仓库的类型有:group、hosted、proxy、virtual。hosted,本地代理仓库,通常我们会部署自己的构件到这一类型的仓库。proxy,代理的远程仓库,它们被用来代理远程的公共仓库,如maven中央仓库。group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置maven依赖仓库组。virtual,这种是maven1的,以后基本不会用到或者很少会用到,所以不用过多理会。
我这里并没有打算讲怎么新建仓库,因为nexus提供的这几个仓库对于简单使用已经可以了。
下面我们先来配置一下Central仓库:a.修改Download Remote Indexes选项为True(允许下载远程仓库的索引)b.在Central仓库上右击,选择Repair Index(代理仓库会去下载远程仓库的索引,方便搜索)c.片刻之后我们在仓库下方的详细信息处点击Browse Index 可以看到有个文件夹 Central,前方有个加号可以打开,如果没有信息,说明还没有下载下来,或者下载失败了。你可以选择等一等,或者在最右侧的菜单栏选择Administration-&Logging,查看运行信息,可能对你有帮助。
允许下载索引-更新索引-步骤4.jpg
有的时候你确实需要等一等,因为我遇到过,怎么也没有索引下载下来,大概我吃了午饭回来,发现它自己下载好了。
同步骤4一样来配置Apache Snapshots这里为我们可以看到仓库policy有Releases、Snapshots两种。Snapshot 代表不稳定、尚处于开发中的版本。Release 代表稳定的版本
现在你可以尝试在右侧菜单栏的搜索框尝试搜索内容。如果你的proxy仓库成功的下载了索引,我们尝试搜索okhttp(你也可以换个关键字)你将会看到如下面的画面
搜索效果-步骤5.jpg
自带仓库Releases、Snapshots就是为我们准备的上传我们自己lib文件的仓库,所以就不必新建其它仓库了
配置仓库组Public Repositories。如下图配置好后,千万要点save进行保存。
仓库组与仓库就像我们android开发中ViewGroup 与 View的关系。本身包含其他仓库,对外又像仓库一样使用。
Public Repositories库配置-步骤7.jpg
8.新建SnapShots仓库组。点击Add-&Repository Group。会在下方仓库区新生成一个“New Repository Group”。我们像下方图: snapshots配置-步骤8.jpg 那样对它进行配置。
新建库组.jpg
snapshots配置-步骤8.jpg
使用我们的仓库
在我们项目的主build.gradle中修改allprojects的maven地址:
allprojects {
repositories {
//jcenter()
maven {url "http://ip:8081/nexus/content/groups/PublicSnapshots/"}
"sync now"一下,现在我们的工程配置的依赖就已经使用我们自己搭建的私有仓库了。
各库地址URL.jpg
上图中Public Snapshots库对应的Respository Path就是我们上方替换默认maven库地址的私库地址。下面Releases、Snapshots库地址就是我们下节 发布到私服 上传脚本中自己的lib库要发布到的仓库地址。
发布到私服
接下来,我们将在Android Studio环境下,来发布我们自己的库文件1.在我们的工程下新建一个lib,我这就叫likelib吧。2.在主项目下新建一个maven_push.gradle来写我们的发布到maven库的脚本
// The Maven plugin adds support for deploying artifacts to Maven repositories.
// 一个可以让你把库上传到maven仓库的插件
apply plugin: 'maven'
// The signing plugin adds the ability to digitally sign built files and artifacts. These digital signatures can then be used to prove who built the artifact the signature is attached to as well as other information such as when the signature was generated.
// 对库文件进行数字签名的插件,可以通过签名知道谁创建了这个库文件,签名的时间等等信息
apply plugin: 'signing'
// 声明变量记录maven库地址
def mavenRepositoryUrl
// 判断是发布到正式库,还是snapshots库
if (isReleaseBuild()) {
println 'RELEASE BUILD'
// 下面的库地址指向的是我们私有仓库的Releases 仓库
mavenRepositoryUrl = hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL
: "http://IP:8081/nexus/content/repositories/releases/"
println 'SNAPSHOTS BUILD'
// 下面的库地址指向的是我们私有仓库的snapshots 仓库
mavenRepositoryUrl = hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL
: "http://IP:8081/nexus/content/repositories/snapshots/"
// NEXUS_USERNAME等变量在我们主项目的gradle.properties中可以找到
def getRepositoryUsername() {
return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
def getRepositoryPassword() {
return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""
// 根据我们在likelib下gradle.properties中声明的版本名称,来分辨是Release版本还是 snapshots版本
def isReleaseBuild() {
return !VERSION_NAME.contains("SNAPSHOT");
//"afterEvaluate是什么鸟?你可以理解为在配置阶段要结束,项目评估完会走到这一步。" 引用自//gradle-android/
afterEvaluate { project -&
// 我们声明我们要执行的上传到maven的task
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -& signing.signPom(deployment) }
// 我们类比下compile com.squareup.okhttp:okhttp:2.7.0
// artifactId 对应com.squareup. groupId 对应version对应2.7.0
// 这样就类似坐标的方式定位到了制定的库文件
pom.artifactId = POM_ARTIFACT_ID
pom.groupId = POM_GROUP_ID
pom.version = VERSION_NAME
// 授权验证,这里也就是你登陆搭建的私服服务器时候的用户名\密码
repository(url: mavenRepositoryUrl) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
// 这里是配置我们maven库需要的pom.xml文件的各个内容,具体意思我们在主目录gradle.properties中解释
pom.project {
name POM_NAME
packaging POM_PACKAGING
description POM_DESCRIPTION
url POM_URL
url POM_SCM_URL
connection POM_SCM_CONNECTION
developerConnection POM_SCM_DEV_CONNECTION
licenses {
name POM_LICENCE_NAME
url POM_LICENCE_URL
distribution POM_LICENCE_DIST
developers {
developer {
id POM_DEVELOPER_ID
name POM_DEVELOPER_NAME
// 进行数字签名
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
// type显示指定任务类型或任务, 这里指定要执行Javadoc这个task,这个task在gradle中已经定义
task androidJavadocs(type: Javadoc) {
// 设置源码所在的位置
source = android.sourceSets.main.java.sourceFiles
// 生成javadoc.jar
task androidJavadocsJar(type: Jar) {
// 指定文档名称
classifier = 'javadoc'
from androidJavadocs.destinationDir
// 生成sources.jar
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.sourceFiles
// 产生相关配置文件的任务
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
3.在主项目下gradle.properties中来声明我们运行脚步时需要的信息
# properties for maven2 repository
# nexus服务器登陆时候的用户名/密码
NEXUS_USERNAME=admin
NEXUS_PASSWORD=admin123
# 在POM文件中使用的group ID
POM_GROUP_ID=com.exmaple.like
# POM文件中指向你网站的地址
POM_URL=/achenglike
# SCM是指版本管理工具,一下说他的相关信息
POM_SCM_URL=/
POM_SCM_CONNECTION=/achenglike
POM_SCM_DEV_CONNECTION=/achenglike
# 你的开放协议相关信息
POM_LICENCE_NAME= Apache License Version 2.0
POM_LICENCE_URL= /achenglike/Gallery/blob/master/LICENSE
POM_LICENCE_DIST=Apache License Version 2.0
# 开发者的相关信息
POM_DEVELOPER_ID=achenglike
POM_DEVELOPER_NAME=achenglike
3.在我们likelib项目下的build.gradle引入我们的脚本
apply from: '../maven_push.gradle'
4.在我们likelib项目下新建一个gradle.properties来存我们需要发布的版本、格式等信息
POM_NAME=Like Library
# artifactId
POM_ARTIFACT_ID=like
# 库的打包格式为aar, 常见的还有jar
POM_PACKAGING=aar
# 库的描述,说明他是干啥的
POM_DESCRIPTION=like Library
# 要发布的版本好,snapshots 版本可以使用格式 1.0.0-SNAPSHOT
VERSION_NAME=1.0.0
5.我们现在可以在android studio的Terminal中来发布我们的库文件了 。输入命令:gradle uploadArchives运行结束Terminal会提示成功或失败,提示成功说明已经上传到了你的私库中。
如果没有意外,我们已经发布到了我们的私有仓库,我们可以自己去看看,就像下面的图。
成功上传库文件.jpg
接下来我们将使用我们上传的库文件1.在app 模块的build.gradle中引入依赖
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:design:23.2.0'
compile 'com.exmaple.like:like:1.0.0'
最下面的库引用就是我们刚才上传的库文件
2.我们在app模块使用依赖的库
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Snackbar.make(view, Hello.getInstance().hello(), Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
文章为原创,转载请注明。示例中的工程已久上传到了Gradle 配置--上传私服 - 简书
Gradle 配置--上传私服
has a built in dependency management component that supports the Maven repositoryformat. In order to configure a Gradle project to resolvedependenciesdeclared inbuild.gradlefile, amavenrepository as shown in Listing: Gradle Repositories Configuration has to be declared.
Listing: Gradle Repositories Configuration.
repositories {
url "http://localhost:8081/repository/maven-public/"
These minimal settings allow Gradle to download the declared dependencies.To deploy build outputs to a repository with theuploadArchivestask, user authentication can be declared ine.g.,gradle.properties:
nexusUrl=http://localhost:8081
nexusUsername=admin
nexusPassword=admin123
and then used in the uploadArchives task with a mavenDeployer configuration from the Maven plugin:
uploadArchives {
repositories {
mavenDeployer {
repository(url: "${nexusUrl}/repository/maven-releases/") {
authentication(userName: nexusUsername, password: nexusPassword)
snapshotRepository(url: "${nexusUrl}/repository/maven-snapshots") {
authentication(userName: nexusUsername, password: nexusPassword)
Full example projects can be found in thegradlefolder of the in thenexus-3.0.xbranch. A full build of thesimple-project, including downloading the declared dependencies and uploading thebuild output to the repository manager can be invoked with
cd gradle/simple-project
gradle upload
Java 软件开发技术交流,咨询gradle(13)
  在的中,我们讲到了如何自定义Task类型,在本篇文章中,我们将讲到如何自定义Plugin。
  请通过以下方式下载本系列文章的Github示例代码:
git clone /davenkin/gradle-learning.git
  在Plugin中,我们可以向Project中加入新的Task,定义configurations和property等。我们3种方法可以自定义Plugin,这些方法和自定义Task类型的3种方法相似。在接下来的例子中,我们将分别通过这3种方法来创建一个DateAndTimePlugin,该Plugin定义了2个Task,分别用于输出系统当前的日期和时间,另外,我们可以配置日期和时间的输出格式。
(一)在build.gradle文件中直接定义Plugin
  和在build.gradle文件中定义Task类型一样,我们可以将对Plugin的定义直接写在build.gradle中:
apply plugin: DateAndTimePlugin
dateAndTime {
timeFormat = 'HH:mm:ss.SSS'
dateFormat = 'MM/dd/yyyy'
class DateAndTimePlugin implements Plugin&Project& {
void apply(Project project) {
project.extensions.create(&dateAndTime&, DateAndTimePluginExtension)
project.task('showTime') && {
println &Current time is & + new Date().format(project.dateAndTime.timeFormat)
project.tasks.create('showDate') && {
println &Current date is & + new Date().format(project.dateAndTime.dateFormat)
class DateAndTimePluginExtension {
String timeFormat = &MM/dd/yyyyHH:mm:ss.SSS&
String dateFormat = &yyyy-MM-dd&
  每一个自定义的Plugin都需要实现Plugin&T&接口,事实上,除了给Project编写Plugin之外,我们还可以为其他Gradle类编写Plugin。该接口定义了一个apply()方法,在该方法中,我们可以操作Project,比如向其中加入Task,定义额外的Property等。
  在上例中,我们在DateAndTimePlugin中向Project添加了2个Task,一个名为showTime,一个名为showDate。请注意创建这2个Task所使用的不同方法,更多的创建Task的方法,请参考本系列。
  每个Gradle的Project都维护了一个ExtenionContainer,我们可以通过project.extentions进行访问,比如读取额外的Property和定义额外的Property等。在DateAndTimePlugin中,我们向Project中定义了一个名为dateAndTime的extension,并向其中加入了2个Property,分别为timeFormat和dateFormat,他们又分别用于showTime和showDate。在使用该Plugin时,我们可以通过以下方式对这两个Property进行重新配置:
dateAndTime {
timeFormat = 'HH:mm:ss.SSS'
dateFormat = 'MM/dd/yyyy'
(二)在当前工程中定义Plugin
  在当前工程中的buildSrc/src/main/groovy/davenkin目录下创建DateAndTimePlugin.groovy文件,将build.gradle中定义DateAndTimePlugin的代码提取到给文件中,但是除去对DateAndTimePluginExtension的定义,因为我们将在另外一个单独的文件中定义DateAndTimePluginExtension。
package davenkin
import org.gradle.api.Plugin
import org.gradle.api.Project
class DateAndTimePlugin implements Plugin&Project& {
void apply(Project project) {
project.extensions.create(&dateAndTime&, DateAndTimePluginExtension)
project.task('showTime') && {
println &Current time is & + new Date().format(project.dateAndTime.timeFormat)
project.tasks.create('showDate') && {
println &Current date is & + new Date().format(project.dateAndTime.dateFormat)
  再创建DateAndTimePluginExtension.groovy:
package davenkin
class DateAndTimePluginExtension {
String timeFormat = &MM/dd/yyyyHH:mm:ss.SSS&
String dateFormat = &yyyy-MM-dd&
  这里,我们将2个类文件都放在了davenkin包下。Gradle在执行时,会自动扫描buildSrc目录,并会在执行Task之前构建该目录下的内容。在build.gradle文件中,在apply该Plugin时,我们需要声明对该Plugin的全名称,即包含报名:
apply plugin: davenkin.DateAndTimePlugin
dateAndTime {
timeFormat = 'HH:mm:ss.SSS'
dateFormat = 'MM/dd/yyyy'
  执行“gradle showTime”,命令行输出如下:
:buildSrc:compileJava UP-TO-DATE
:buildSrc:compileGroovy UP-TO-DATE
:buildSrc:processResources UP-TO-DATE
:buildSrc:classes UP-TO-DATE
:buildSrc:jar UP-TO-DATE
:buildSrc:assemble UP-TO-DATE
:buildSrc:compileTestJava UP-TO-DATE
:buildSrc:compileTestGroovy UP-TO-DATE
:buildSrc:processTestResources UP-TO-DATE
:buildSrc:testClasses UP-TO-DATE
:buildSrc:test UP-TO-DATE
:buildSrc:check UP-TO-DATE
:buildSrc:build UP-TO-DATE
Current time is 19:08:35.489
BUILD SUCCESSFUL
Total time: 2.995 secs
  可以看到,Gradle会首先构建buildSrc目录,然后才执行showTime(红色部分)。
(三)在单独的项目中创建Plugin
  新建一个项目,将(二)中buildSrc目录下的内容拷贝到该项目下,定义该项目的build.gradle文件如下:
apply plugin: 'groovy'
apply plugin: 'maven'
version = 1.0
group = 'davenkin'
archivesBaseName = 'datetimeplugin'
repositories.mavenCentral()
dependencies {
compile gradleApi()
groovy localGroovy()
uploadArchives {
repositories.mavenDeployer {
repository(url: 'file:../lib')
  此外,我们还可以为该Plugin重新命名,如果我们希望将该Plugin命名为time,那么我们需要在src/main/resources/META-INF/gradle-plugins目录下创建名为time.properties的文件,内容如下:&
implementation-class = davenkin.DateAndTimePlugin
  在执行“gradle uploadArchives”时,Gradle会将该Plugin打包成jar文件,然后将其上传到上级目录下的lib目录中(../lib)。之后,在客户端的build.gradle文件中,我们需要做如下定义:
buildscript {
repositories {
url 'file:../lib'
dependencies {
classpath group: 'davenkin', name: 'datetimeplugin',
version: '1.0'
apply plugin: 'time'
dateAndTime {
timeFormat = 'HH:mm:ss.SSS'
dateFormat = 'MM/dd/yyyy'
  首先我们配置repository以执行lib目录,然后声明对DateAndTimePlugin的依赖,再apply该Plugin,此时我们应该使用“time”作为该Plugin的名称,最后对该Plugin进行配置。
(本系列完)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1393710次
积分:14705
积分:14705
排名:第855名
原创:79篇
转载:845篇
评论:170条
(1)(1)(26)(5)(42)(46)(105)(81)(67)(37)(4)(1)(12)(12)(24)(28)(69)(32)(34)(20)(1)(7)(10)(13)(36)(1)(2)(12)(21)(6)(8)(16)(1)(11)(4)(3)(6)(4)(2)(2)(2)(3)(4)(3)(2)(1)(5)(4)(1)(6)(6)(4)(2)(6)(5)(7)(1)(7)(15)(5)(1)(16)(5)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 gradle maven upload 的文章

 

随机推荐