我编写了以下任务,它提取了每个子项目的所有编译依赖项,并将它们放在每个子项目目录中:
task exportCompileLibs << {
subprojects.each { iSubProject ->
iSubProject.configurations.findAll{it.name == "compile"}.each{ jConfig ->
println "copying compile libs for ${iSubProject.name}..."
copy {
into "${iSubProject.buildDir}/gradle-lib-export"
from jConfig
eachFile {println it.name}
}
}
}
}
我想扩展这个也导出Gradle已经知道的源工件(我可以在缓存目录中看到源jar),我只是想不通如何使用对象模型来获取他们的手柄。
IDEA和Eclipse插件似乎能够做到这一点(他们将他们直接构建的项目文件指向gradle缓存),但我无法弄清楚如何做到这一点 - 并查看IDE插件源代码,它看起来......棘手。我希望有一些明显的东西,我在gradle DSL或API中缺少。
有人有任何想法吗?
答案 0 :(得分:1)
对于任何寻求至少一个临时解决方案的人来说,以下似乎完全正是我现在想做的事情。
您必须将IDEA插件应用于要为其导出依赖项的每个项目的build.gradle文件:
申请插件:'想法'
然后定义此任务:
task exportDependencies << {
def deps = project.extensions.getByType(IdeaModel).module.resolveDependencies()
copy {
from deps*.classes.file
into "${buildDir}/gradle-lib-export/libs"
}
copy {
from deps*.sources.file
into "${buildDir}/gradle-lib-export/sources"
}
}
这是我可怕的黑客,所以我不必为每个子项目应用插件:
task exportDependencies(description: "export project dependency jars") << {
subprojects.each { Project iSubProject ->
String target = "${iSubProject.buildDir}/gradle-lib-export"
IdeaPlugin ideaPlugin = new IdeaPlugin()
ideaPlugin.apply(iSubProject)
Set<Dependency> deps = ideaPlugin.model.module.resolveDependencies()
println "exporting dependencies for $iSubProject.name into $target"
copy {
from deps*.classes.file
into "${target}/libs"
eachFile { println "lib -> $it.name" }
}
copy {
from deps*.sources.file
into "${target}/sources"
eachFile{ println "source -> $it.name" }
}
}
}
+10点不会让我的构建任务列表与我不想要的东西混淆, - ewwwww 的几百万点。
答案 1 :(得分:0)
目前没有比IDE插件更简单的方法。这有望在未来发生变化。