gradle - 使用Gradle创建构建后复制任务

标签 gradle build.gradle

我在Gradle构建生命周期中苦苦挣扎;特别是在configurationexecution阶段之间进行拆分。我已经阅读了Gradle手册中的许多部分,并且在线上看到了很多想法,但是没有找到以下问题的解决方案:

我想运行一个特定任务以在java-library-distribution构建的末尾生成 Artifact ,该 Artifact 是runtime配置jar的扁平版本。也就是说,我只想在运行特定任务来创建 Artifact 时产生 Artifact 。

我创建了以下任务:

task packageSamplerTask(type: Tar, dependsOn: distTar) {
    description "Packages the build jars including dependencies as a flattened tar file. Artifact: ${distsDir}/${archivesBaseName}-${version}.tar"
    from tarTree("${distsDir}/${archivesBaseName}-${version}.tar").files
    classifier = 'dist'
    into "${distsDir}/${archivesBaseName}-dist-${version}.tar"
}

尽管此任务确实产生了所需的 Artifact ,但该任务在gradle的configuration阶段运行。此行为具有以下后果:
  • 不管我从命令行运行哪个任务,此packageSamplerTask任务始终运行,通常不必要地运行;和
  • 如果我对项目进行clean,则构建将在下次运行时失败,因为$distsDir阶段(显然)期间configuration不存在。

  • 看来,如果我以这种方式扩展Copy任务,我总是会得到这种过早的行为。

    有没有一种方法可以使用<< closure / doLast声明来获取我想要的东西?还是还有其他我想念的事情/应该做什么?

    更新

    经过进一步的工作,我澄清了我的要求,并如下(具体地)解决了我的问题:

    "I want to package my code and my code's dependencies as a flat archive of jars that can be deployed as a jMeter plugin. The package can then be installed by unpacking into the jMeter lib/ext directory, as is. The package, therefore, must not include the jMeter jars (and their dependencies) which are used for building and testing"



    因为Gradle似乎不支持类似Maven的provided依赖项管理,所以我为我的程序包创建了一个新配置,其中不包括jMeter jar。
    configurations {
        jmpackage {
            extendsFrom runtime
            exclude group: 'org.apache.jmeter', name: 'ApacheJMeter_core', version: '2.11'
            exclude group: 'org.apache.jmeter', name: 'ApacheJMeter_java', version: '2.11'
        }
    }
    

    然后创建以下任务(使用Peter Niederwieser的闭包建议):
    task packageSamplerTask(type: Tar, dependsOn: assemble) {
        from { libsDir }
        from { configurations.jmpackage.getAsFileTree() }
        classifier = 'dist'
    }
    

    该解决方案似乎可以正常工作,它使我也可以仅使用Gradle java插件。

    最佳答案

    任务声明很好,但是也需要推迟展平:

    ...
    from { tarTree("${distsDir}/${archivesBaseName}-${version}.tar").files }
    

    另外,应以更抽象的方式引用Tar文件。例如:
    from { tarTree(distTar.archivePath).files }  
    

    关于gradle - 使用Gradle创建构建后复制任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25226318/

    相关文章:

    gradle - gradle 中的 Maven 站点

    android - 使用一个命令构建 android bundle 和 apk

    java - 默认情况下,Gradle Checkstyle 插件与 Google Checks 不兼容

    android - Sinch教程Gradle构建错误

    android - Android SDK Canary 4中Gradle构建失败

    android - 如何在一个Android Studio项目中构建两个Android应用程序?

    android - Jenkins在Debian服务器上,无法安装Gradle

    ant - 从Gradle设置环境变量

    grails - Gradle 在构建 Grails 项目时给出 ClassNotFoundException

    Android 注释未使用 buildToolsVersion 19.1.0 生成