我正在尝试从应该发布到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是一个新的熟人,我还没有真正掌握如何构建这些问题!
答案 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文件,那可能永远不会起作用。