Gradle 1.12用户指南翻译——第六十四章. 发布到Ivy(新)

简介: 其他章节的翻译请参见
翻译项目请关注Github上的地址:
https://github.com/msdx/gradledoc

另外,目前Gradle1.12版本的文档已经翻译完并进入校稿阶段,校稿的方式为到该项目https://github.com/msdx/gradledoc 提交issue或是pull request。校稿的结果不只是在此版本更新,也会用于改善Gradle下一版本(2.0)文档的翻译。


第六十四章. 发布到Ivy(新)

本章内容描述了一个新的 孵化中的 功能,是由“ivy-publish”插件提供的 Ivy 发布支持。最终这个新的发布支持的发布功能将会取代Upload任务的发布功能。

如果你正在查找关于使用 Upload 任务的原始的Ivy发布支持的文档,

本章内容主要描述了如何发布使用 Apache Ivy 格式的构建构件,通常是发布到一个用于其他构建或项目的消费的仓库。发布的内容是一个或多个在构建中创建的构件,以及一个描述了这些构件以及它们的依赖的Ivy 模块描述文件(通常是 ivy.xml)。

如果有需要的话,你也可以修改所创建的描述符的几乎任何方面。这意味着,用这样的方式,可能会把这个描述符修改为不再是有效的Ivy模块描述符,所以必须谨慎使用这个功能。

已发布模块的标识符(organisation,module,revision)则是一个例外;不能使用“withXML”hook 来修改描述符中的这些值。

64.2.5. 发布多个模块

有时候从你的 Gradle 构建中发布多个模块会很有用,而不是创建一个单独的 Gradle 子项目。一个例子是为您的library 分别发布一个单独的 API 和它的实现的 jar。使用 Gradle 的话很简单︰

示例 64.6. 从一个单一的项目发布多个模块

build.gradle

task apiJar(type: Jar) {
        baseName "publishing-api"
        from sourceSets.main.output
        exclude '**/impl/**'
    }
    publishing {
        publications {
            impl(IvyPublication) {
                organisation 'org.gradle.sample.impl'
                module 'project2-impl'
                revision '2.3'

                from components.java
            }
            api(IvyPublication) {
                organisation 'org.gradle.sample'
                module 'project2-api'
                revision '2'
            }
        }
    }

如果一个项目定义了多个要发布的内容,Gradle 将把每一个都发布到定义的仓库。如上文所述,每个发布的内容都必须给定一个唯一的标识。

64.3. 仓库

发布的内容都会被发布到仓库中用于发布的仓库是通过PublishingExtension.getRepositories()容器来定义的。

示例 64.7. 声明用于发布的仓库

build.gradle

repositories {
        ivy {
            url "$buildDir/repo" // change to point to your repo, e.g. http://my.org/repo
        }
    }

定义用于发布的仓库的DSL和定义用于查找依赖的仓库的DSL一样(RepositoryHandler)。然而,在Ivy发布的场景中,只有通过 ivy()方法创建的仓库才可以作为发布的指定地方。例如,你不能把一个 IvyPublication发布到一个Maven仓库中。

64.4. 执行发布

对每一个在 publishing.publications 和 publishing.repositories 容器中分别组合的IvyPublication 和 IvyArtifactRepository,“ivy-publish” 插件自动为它们创建了一个 PublishToIvyRepository 任务。

这个创建的任务使用“publish«PUBLICATION 名称»PublicationTo«REPOSITORY 名称»Repository”的方式来命名。因此,在下面的例子中,创建了一个 PublishToIvyRepository 任务,名字叫做“publishIvyJavaPublicationToIvyRepository”。

示例 64.8. 选择要发布的特定出版物

build.gradle

apply plugin: 'java'
apply plugin: 'ivy-publish'

group = 'org.gradle.sample'
version = '1.0'

publishing {
    publications {
        ivyJava(IvyPublication) {
            from components.java
        }
    }
    repositories {
        ivy {
            url "$buildDir/repo" // change to point to your repo, e.g. http://my.org/repo
        }
    }
}

gradle publishIvyJavaPublicationToIvyRepository的输出结果

> gradle publishIvyJavaPublicationToIvyRepository
:generateDescriptorFileForIvyJavaPublication
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
:publishIvyJavaPublicationToIvyRepository

BUILD SUCCESSFUL

Total time: 1 secs

64.4.1.  “publish” 生命周期任务

这个“publish插件(即“ivy-publish” 插件隐式应用的)添加了一个 叫做“publish”的生命周期任务,可以用于发布所有出版物到所有适用的仓库中。

更具体而言,执行这个任务将会执行在项目中的所有 PublishToIvyRepository 任务。这通常是执行发布的最方便的方法。

示例 64.9. 通过“publish”生命周期任务发布所有出版物

gradle publish的输出结果

> gradle publish
:generateDescriptorFileForIvyJavaPublication
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
:publishIvyJavaPublicationToIvyRepository
:publish

BUILD SUCCESSFUL

Total time: 1 secs

64.5. 不发布的情况下生成Ivy模块的描述符文件

有时候,我们会需要在不发布你的模块到Ivy仓库的情况下,生成Ivy模块描述符文件(通常是ivy.xml)。因为描述符文件的生成是由一个单独的任务执行的,所以这很容易做到。

ivy-publish”插件自动为每一个注册的 IvyPublication连接了一个GenerateIvyDescriptor 任务。这个任务被指定为一个基于发布的名称的名字:“generateDescriptorFileFor«发布名称»Publication”。因此,在上面的例子中,发布的名称叫“ivyJava”,那么这个任务的名称就会是“generateDescriptorFileForIvyJavaPublication”。

你可以通过在生成任务上设置destination属性,指定生成的Ivy文件位置。默认情况下这个文件将会生成到build/publications/«发布名称»/ivy.xml

示例 64.10. 生成Ivy模块描述符文件

build.gradle

model {
    tasks.generateDescriptorFileForIvyCustomPublication {
        destination = file("$buildDir/generated-ivy.xml")
    }
}

gradle generateDescriptorFileForIvyCustomPublication的输出结果

> gradle generateDescriptorFileForIvyCustomPublication
:generateDescriptorFileForIvyCustomPublication

BUILD SUCCESSFUL

Total time: 1 secs

ivy-publish”插件利用了后期插件配置的一些实验性的支持,并且在配置发布扩展之前,不会构造GenerateIvyDescriptor任务。确保当你尝试访问GenerateIvyDescriptor任务时,发布插件已经配置好的最简单的方式是,将访问的代码放在publishing代码块中,如上面的例子中所示。

这同样适用于任何发布相关的任务的访问,像PublishToIvyRepository。这些任务应该从publishing代码块内引用。

64.6. 完整的示例

下面的例子演示了如何使用在多项目构建中进行发布。每个项目发布一个 java 组件,以及配置额外的源码构件。自定描述符,以包含每一个项目的项目描述。

示例 64.11. 发布一个 java 模块

build.gradle

subprojects {
    apply plugin: 'java'
    apply plugin: 'ivy-publish'

    version = '1.0'
    group = 'org.gradle.sample'

    repositories {
        mavenCentral()
    }
    task sourceJar(type: Jar) {
        from sourceSets.main.java
        classifier "source"
    }
}

project(":project1") {
    description = "The first project"

    dependencies {
       compile 'junit:junit:4.11', project(':project2')
    }
}

project(":project2") {
    description = "The second project"

    dependencies {
       compile 'commons-collections:commons-collections:3.1'
    }
}

subprojects {
    publishing {
        repositories {
            ivy {
                url "${rootProject.buildDir}/repo" // change to point to your repo, e.g. http://my.org/repo
            }
        }
        publications {
            ivy(IvyPublication) {
                from components.java
                artifact(sourceJar) {
                    type "source"
                    conf "runtime"
                }
                descriptor.withXml {
                    asNode().info[0].appendNode('description', description)
                }
            }
        }
    }
}

其结果是将为每个项目发表以下构件︰

  • Ivy 模块描述符文件︰ivy-1.0.xml
  • Java 组件的主要“jar”构件︰project1-1.0.jar
  • 已显式配置的源码“jar”构件︰project1-1.0-source.jar

project1发布时,产生的模块描述符(即ivy.xml文件)将是……

注意:在这个例子的Ivy模块描述符中的«发布时间戳»将是描述符文件生成时的时间戳。

示例 64.12. 生成 ivy.xml的示例

output-ivy.xml


 version="2.0">
   organisation="org.gradle.sample" module="project1" revision="1.0" status="integration" publication="«PUBLICATION-TIME-STAMP»">
    The first project
  
  
     name="default" visibility="public" extends="runtime"/>
     name="runtime" visibility="public"/>
  
  
     name="project1" type="jar" ext="jar" conf="runtime"/>
     name="project1" type="source" ext="jar" conf="runtime" m:classifier="source" xmlns:m="http://ant.apache.org/ivy/maven"/>
  
  
     org="junit" name="junit" rev="4.11" conf="runtime->default"/>  org="org.gradle.sample" name="project2" rev="1.0" conf="runtime->default"/>  

64.7. 未来特性

ivy-publish”插件的功能,如上文所述是不完整的,因为这一功能仍然在孵化中。在即将到来的 Gradle 版本中,功能将会扩展到包括(但不仅限于)︰

  • 方便定制的模块属性(moduleorganisation等)。
  • module descriptor中方便依赖报告的自定义。
  • 每个项目的多个谨慎发布


目录
相关文章
|
XML IDE Java
【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )
【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )
309 0
【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )
|
Java API 数据格式
Gradle 1.12 翻译——第十六章. 使用文件
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41113353 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。
940 0
|
XML Java 测试技术
Gradle 1.12 翻译——第十五章. 任务详述
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41038305 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。
821 0
|
缓存 Java 持续交付
Gradle 1.12 翻译——第十四章. 教程 - 杂七杂八
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41006627 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。
1083 0
|
Java 测试技术
Gradle 1.12 翻译——第九章 Groovy快速入门
由于时间关系,没办法同时做笔记和翻译,关于Gradle的用户指南,本博客不再做相关笔记,而只对未翻译章节进行翻译并在此发表。 有关其他已翻译的章节请关注Github上的项目:https://github.
1143 0
|
存储 Java Unix
Gradle 1.12 翻译——第十二章 使用Gradle 图形用户界面
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/40949821 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。
1045 0
|
Java 容器
翻译:Gradle之 Java插件
原文地址 http://www.gradle.org/docs/current/userguide/java_plugin.html 23.1. Usage用法 要使用Java插件,在脚本里加入: Example 23.1. Using the Java plugin build.gradle apply plugin: 'java' 23.2. Source sets源集 Java插件引入了一个概念:源集(source set),一个源集就是一组被一起编译一起执行的源文件。
807 0
|
Java API
翻译:Gradle之构建脚本编写
原文地址 http://www.gradle.org/docs/current/userguide/writing_build_scripts.html 13.1. The Gradle build language构建语言 Gradle提供了一种“领域专用语言”(domain specific language) 或者 DSL对构建进行描述。
965 0
|
Java 数据库连接 Maven
翻译:Gradle之依赖管理
  原文地址 http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html   8.1. What is dependency management?何谓?为何? 依赖管理大致有两块:首先Gradle需要找到你工程需要的东西,这些东西就是所谓的“依赖”。
846 0
|
Java 测试技术 API
翻译--Gradle之Java工程入门
原文地址 http://www.gradle.org/docs/current/userguide/tutorial_java_projects.html   7.1. The Java plugin插件 我们已经看到Gradle是一个通用构建工具,它可以完成相当多的任务,只要你能在脚本里定义好。
1273 0

热门文章

最新文章