从Gradle中的任务添加多个工件

时间:2013-02-12 23:16:54

标签: gradle

我正在尝试从应该发布到maven repo的单个项目中创建多个jar,但我似乎无法正确获取工件详细信息。

从我看过处理sources-jar的例子中,我试图创建(动态)应该创建每个jar的几个任务。

def environments = ['local', 'dev', 'test', 'acc', 'prod']

environments.each { e ->
    task "create${e}jar"(type: Jar, dependsOn: classes) << {
       def dir = filterPropertiesForEnv(e)

       from (dir)
       classifier = e
    }

    artifacts.add('archives', tasks["create${e}jar"])
}


File filterPropertiesForEnv(envName) {
    println "filter for $envName"
    def destDir = new File(project.buildDir, envName)

    destDir.mkdir()

    // Do filter stuff based on each envName

    destDir
}

当我运行“安装”任务时,运行我动态创建的任务“create [name] jar”,但它不会创建任何jar文件。如果我删除了doLast - “&lt;&lt;”,那么构建会生成几个jar文件,但是jar文件是在执行其他所有操作之前构建的(在configure-stage期间),因此它只包含一个清单文件。

有没有更好的方法来创建多个罐子并将它们作为工件附加?我还需要创建几个基于相同模式的ear-files,包含这个jar,所以找到一个可重用的解决方案会很不错。 我精通Maven,但Gradle是一个新的熟人,我还没有真正掌握如何构建这些问题!

2 个答案:

答案 0 :(得分:1)

经过一番调查后,我发现如果你给from方法添加一个闭包,那么评估将在运行时而不是配置时完成。

然后是一个有效的解决方案:

def environments = ['local', 'dev', 'test', 'acc', 'prod']

environments.each { e ->
    task "create${e}jar"(type: Jar, dependsOn: classes) << {

       from {
           filterPropertiesForEnv(e)
       }
       classifier = e
    }

    artifacts.add('archives', tasks["create${e}jar"])
}


File filterPropertiesForEnv(envName) {
    println "filter for $envName"
    def destDir = new File(project.buildDir, envName)

    destDir.mkdir()

    // Do filter stuff based on each envName

    destDir
}

答案 1 :(得分:0)

所以你想为每个环境发布一个不同的jar?并发布带有uploadArchives任务的那些?

执行此操作的最佳方法可能是为每个环境创建子项目。这样,您就可以为每个子项目设置上传任务。从您发布的代码中,您似乎已经拥有不同目录中不同环境的代码。

如果你正在做一些疯狂的事情,你从一个大的代码库中过滤不同的文件,试图为不同的环境创建一个Jar文件,那可能永远不会起作用。

相关问题