Gradle 1.12用户指南翻译——第五十二章. Maven 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:
http://blog.csdn.net/column/details/gradle-translation.html
翻译项目请关注Github上的地址:
https://github.com/msdx/gradledoc
本文翻译所在分支:
https://github.com/msdx/gradledoc/tree/1.12。
直接浏览双语版的文档请访问:
http://gradledoc.qiniudn.com/1.12/userguide/userguide.html。
另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,目前0.5版本兼容 Android 2.3以上系统,项目地址如下:
https://github.com/msdx/gradle-doc-apk
翻译不易,转载请注明本文在CSDN博客上的出处:
http://blog.csdn.net/maosidiaoxian/article/details/53749725
关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。如发现翻译有误的地方,将首先在以上两个地方更新。因时间精力问题,博客中发表的译文基本不会同步修改。
另外,目前Gradle1.12版本的文档我电脑上已经翻译到第六十三章,所以该版本的翻译也进入校稿阶段,校稿的方式可以为到该项目https://github.com/msdx/gradledoc 提交issue或者是pull request。校稿的结果不只是在此版本更新,也会用于改善Gradle下一版本(2.0)文档的翻译。
第五十二章. Maven 插件
此章节还在完善中。
Maven 插件添加了将项目部署到 Maven 仓库的支持。
52.1. 用法
要使用 Maven 插件,请在构建脚本中包含以下语句:
示例 52.1. 使用 Maven 插件
build.gradle
apply plugin: 'maven'
52.2. 任务
Maven 插件定义了以下任务:
表 52.1. Maven 插件 - 任务
| 任务名称 | 依赖于 | 类型 | 描述 |
install |
所有构建相关archives的任务。 | Upload |
将相关的构件安装到本地的 Maven 缓存,包括 Maven 元数据的生成。默认情况下 install 任务是与archives配置相关联的。该项配置在默认情况下只包含默认的 jar 文件。要了解更多关于安装到本地资源库的内容,请参阅:第 52.6.3 节,“安装到本地仓库” |
52.3. 依赖管理
Maven 插件不定义任何依赖配置。
52.4. 约定属性
Maven 插件定义了下列约定属性:
表 52.2. Maven 插件 - 属性
| 属性名称 | 类型 | 默认值 | 描述 |
pomDirName |
String |
poms |
相对于构建目录,用于写入生成的POM的文件夹路径。 |
pomDir |
File (read-only) |
|
生成的POM所写入的目录。 |
conf2ScopeMappings |
Conf2ScopeMappingContainer |
n/a |
将Gradle配置映射到Maven scopes的说明。见52.6.4.2 节,“依赖映射”。 |
这些属性由一个MavenPluginConvention 的约定对象提供。
52.5. 约定方法
Maven 插件提供了用于创建 POM 的工厂方法,如果你需要一个 POM 文件但是没有上传到 Maven 仓库的场景,这个工厂方法将非常有用。
示例 52.2. 创建一个单独的 pom。
build.gradle
task writeNewPom << {
pom {
project
inceptionYear '2008'
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
}
}
}
}.writeTo("$buildDir/newpom.xml")
}
除其他事项外,Gradle支持和polyglot Maven同样的生成器语法。如果要了解关于 Gradle Maven POM 对象的更多信息,请参阅MavenPom。请参见: MavenPluginConvention
52.6. 与 Maven 仓库的交互
52.6.1. 介绍
通过 Gradle你可以部署到远程 Maven 仓库,或者是安装到你的本地 Maven 仓库。这包括所有的 Maven 元数据操纵,并且 Maven snapshot一样可用。事实上,Gradle 的部署是 100%兼容 Maven的,因为我们在hood下使用的是本地的 Maven Ant 任务。
如果你没有一个POM文件,部署到 Maven 仓库只有一半的乐趣。幸运的是 Gradle 可以使用它的依赖信息为你生成这个 POM。
52.6.2. 部署到 Maven 仓库
让我们假设你的项目只是产生默认的 jar 文件。现在你想要将这个 jar 文件部署到远程 Maven 仓库。
示例 52.3. 上传文件到远程 Maven 仓库
build.gradle
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
}
}
}
就这些了。调用uploadArchives任务将生成 POM,并将部署构件和 POM 到指定的仓库。
如果你需要支持文件之外的其他协议,那么你还需要再做一些事情。在这种情况下,我们必须将委派本地的Maven代码给第三方库实现。具体是哪些库,将取决于你需要的协议。表 52.3. “Maven 部署的协议jar”列出了可用的协议以及相应的库(这些库又有具有传递依赖,而这些依赖也有其自己的传递依赖)。[19] 举个例子,要使用ssh协议,你可以:
示例 52.4. 通过 SSH 上传文件
build.gradle
configurations {
deployerJars
}
repositories {
mavenCentral()
}
dependencies {
deployerJars "org.apache.maven.wagon:wagon-ssh:2.2"
}
uploadArchives {
repositories.mavenDeployer {
configuration = configurations.deployerJars
repository(url: "scp://repos.mycompany.com/releases") {
authentication(userName: "me", password: "myPassword")
}
}
}
Maven deployer有很多配置选项。这个配置通过一个 Groovy builder 来完成。这个配置树的所有元素都是 Java beans。你可以传一个map到bean元素中,来配置简单的属性。如果要添加另一个bean元素到它的parent,你可以使用一个闭包。在上例中repository和authentication都是这样的 bean 元素。表 52.4,"MavenDeployer 的配置元素"列出了可用的 bean 元素,以及 javadoc 中相应类的链接。在javadoc 中你可以看到可能的属性,这些属性你可以设置为特定的元素。
在 Maven 中你可以定义仓库和snapshot仓库。如果没有定义任何snapshot 仓库,release和snapshot都将部署到repository元素中。否则,snapshots将部署到snapshotRepository元素中。
表 52.3. Maven 部署的协议 jars
| 协议 | Library |
| http | org.apache.maven.wagon:wagon-http:2.2 |
| ssh | org.apache.maven.wagon:wagon-ssh:2.2 |
| ssh-external | org.apache.maven.wagon:wagon-ssh-external:2.2 |
| ftp | org.apache.maven.wagon:wagon-ftp:2.2 |
| webdav | org.apache.maven.wagon:wagon-webdav:1.0-beta-2 |
| file | - |
表 52.4. 配置 MavenDeployer 的元素
| 元素 | Javadoc |
| root | MavenDeployer |
| repository | org.apache.maven.artifact.ant.RemoteRepository |
| authentication | org.apache.maven.artifact.ant.Authentication |
| releases | org.apache.maven.artifact.ant.RepositoryPolicy |
| snapshots | org.apache.maven.artifact.ant.RepositoryPolicy |
| proxy | org.apache.maven.artifact.ant.Proxy |
| snapshotRepository | org.apache.maven.artifact.ant.RemoteRepository |
52.6.3. 安装到本地仓库
Maven 插件将install任务添加到你的项目。这个任务依赖于archives配置的所有archives任务。它将这些archives安装到你的本地 Maven 仓库中。本地仓库的默认位置是否在 Maven settings.xml中被重新定义,这项任务也会考虑到。
52.6.4. Maven POM 生成
当部署一个artifact 到一个 Maven 库时,Gradle 会自动为它生成一个POM。下表展示了用于POM的groupId,artifactId,version和packaging元素的默认值。这些dependency元素由project 的依赖声明所创建。
表 52.5. Maven POM 生成的默认值
| Maven 元素 | 默认值 |
| groupId | project.group |
| artifactId | uploadTask.repositories.mavenDeployer.pom.artifactId(如果有设置的话)或archiveTask.baseName. |
| version | project.version |
| packaging | archiveTask.extension |
在这里, uploadTask和archiveTask分别指向上传和分别生成archive的任务(例如uploadArchives和jar)。archiveTask.baseName默认为project.archivesBaseName,后者默认为project.name。
当你将archiveTask.baseName设置为非默认值时,请确保将uploadTask.repositories.mavenDeployer.pom.artifactId设置为相同的值。否则,在相同的构建中,这个项目可能会被其他项目所生成的POMs 中错误的 artifact ID所引用到。
生成的 POMs 可以在<buildDir>/poms看到。它们可以通过MavenPom API 进一步定制化。例如,你可能希望部署到 Maven 仓库中的artifact 有不同的版本,或者是不同于 Gradle 生成的artifact 的名称。如果要自定义这些你可以这样做:
示例 52.5. pom定制
build.gradle
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
pom.version = '1.0Maven'
pom.artifactId = 'myMavenName'
}
}
}
如果要向 POM 添加其他的内容,可以使用pom.project 生成器。通过这个生成器,Maven POM 参考中列出的任何元素都可以被添加进来。
示例 52.6. pom 的生成器类型自定义
build.gradle
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
pom.project {
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
}
}
}
}
}
}
注:groupId,artifactId,version和packaging应该始终直接在pom对象上设置。
示例 52.7. 修改自动生成的内容
build.gradle
[installer, deployer]*.pom*.whenConfigured {pom ->
pom.dependencies.find {dep -> dep.groupId == 'group3' && dep.artifactId == 'runtime' }.optional = true
}
如果你有超过一个的artifact 要发布,那么要做的事情就会有些不同。请参阅第 52.6.4.1 节,“一个项目多个构件”。
要为 Maven installer(见第 52.6.3 条,“安装到本地资源库”) 自定义设置,你可以:
示例 52.8. Maven installer 的自定义
build.gradle
install {
repositories.mavenInstaller {
pom.version = '1.0Maven'
pom.artifactId = 'myName'
}
}
52.6.4.1. 一个项目多个构件
Maven 只可以处理一个项目一个构件。这也反映在 Maven POM 的结构中。我们认为在很多情况下,有意义一个项目有超多一个的构件。在这种情况下,你需要生成多个 POMs。在这种情况下,你必须显式声明你想要发布到一个 Maven 仓库的每一个构件。MavenDeployer和 MavenInstaller 都为此提供了一个 API:
示例 52.9. 多个 poms 的生成
build.gradle
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
addFilter('api') {artifact, file ->
artifact.name == 'api'
}
addFilter('service') {artifact, file ->
artifact.name == 'service'
}
pom('api').version = 'mySpecialMavenVersion'
}
}
}
你需要为你想发布的每一个构件声明一个过滤器。这个过滤器为每一个它接受的 Gradle 构件定义了一个布尔表达式。每个过滤器都有一个你可以进行配置的POM与它关联。要了解更多关于它的信息,你可以看一下PomFilterContainer和其关联的类。
52.6.4.2. 依赖映射
Maven 插件配置了由Java插件和War插件添加的Gradle configurations 与Maven scopes之间的默认映射。大多数情况下你不需要去接触它,并且你可以安全地跳过本节。映射过程像下面所示。你可以把一个configuration映射到一个并且只能是一个scope上。不同的configurations可以映射到一个或不同的scopes。一个configuration可以指定到一个特定的 configuration-to-scope 映射的优先级。你可以参考Conf2ScopeMappingContainer来了解更多的信息。要访问映射配置,你可以:
示例 52.10. 访问映射配置
build.gradle
task mappings << {
println conf2ScopeMappings.mappings
}
如果有可能,Gradle排除的规则会被转换为Maven excludes。如果 Gradle 排除规则中group和module名字被指定的话(相比于Ivy,Maven对这两个都需要),这种转换是可能的。每一个configuration的排除规则如果可以被转换的话,也会包含在Maven POM中。
Gradle 1.12用户指南翻译——第五十二章. Maven 插件的更多相关文章
- Gradle 1.12用户指南翻译——第三十二章. JDepend 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第四十二章. Announce插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第三十九章. IDEA 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第三十四章. JaCoCo 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第四十四章. 分发插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第六十四章. 发布到Ivy(新)
其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://gith ...
- Gradle 1.12用户指南翻译——第四十九章. Build Dashboard 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第六十五章. Maven 发布(新)
其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://gith ...
随机推荐
- 三,前端---JS最基本的创建对象的方法
1:工厂模式 function createPerson(name, job){ var person = new Object(); person.name = name; person.job = ...
- Docker配置加速器
我们国内使用官方Docker Hub仓库实在是太慢了,很影响效率 使用命令编辑文件: vim /etc/docker/daemon.json 加入下面的数据: docker-cn镜像: { " ...
- [NOIp 2016]天天爱跑步
Description 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图 ...
- TopCoder SRM 559 Div 1 - Problem 900 CircusTents
传送门:https://284914869.github.io/AEoj/559.html 题目简述: n个实心圆,两两没有交集,在第一个圆上找一个点,使得它到另外一个圆上某个点的最短距离的最小值尽量 ...
- ●BZOJ 1233 [Usaco2009Open] 干草堆 tower
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1233 留坑.以后再来看看. (绝望,无奈,丧心...) (这个题的证明真的很诡异啊,看得我稀 ...
- ●hihocoder #1394 网络流四·最小路径覆盖
题链: http://hihocoder.com/problemset/problem/1394 题解: 有向图最小路径覆盖:最少的路径条数不重不漏的覆盖所有点. 注意到在任意一个最小路径覆盖的方案下 ...
- 【Uva 11604 编码都有歧义了】
·你的目的就是要让编码有歧义,这就美妙了. ·英文题,述大意: 给出n个模板字符串,询问是否存在一个字符串,使得用模板串(随便你用多少个)来拼凑这个串,能够至少有两种拼法.如果有,就输出“ ...
- Amazon新一代云端关系数据库Aurora(上)
本文由 网易云发布. 在2017年5月芝加哥举办的世界顶级数据库会议SIGMOD/PODS上,作为全球最大的公有云服务提供商,Amazon首次系统的总结 了新一代云端关系数据库Aurora的设计实现 ...
- 腾讯笔试题:小Q硬币组合
腾讯有一道机试题: 大概意思是: 小Q非常富有,拥有非常多的硬币,小Q的拥有的硬币是有规律的,对于所有的非负整数K,小Q恰好> 各有两个数值为2^k,的硬币,所以小Q拥有的硬币是1,1,2,2, ...
- C语言程序设计第五次作业——循环结构
(一)改错题 1.题目:输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉.计算公式如下: c = 5 ...