Java Gradle:当任务运行时,如何将子项目jar复制到另一个子项目?
我在Gradle有以下多项目结构:Java Gradle:当任务运行时,如何将子项目jar复制到另一个子项目?,java,gradle,Java,Gradle,我在Gradle有以下多项目结构: - root-project - acceptance-tests - sub-java-proj 验收测试有一个任务cucumber(由Gradle cucumber插件提供),该任务在项目中运行cucumber特性。但是,在运行这些功能之前,我需要进行一些引导。特别是,在执行任务之前,Gradle应执行以下操作: 在子java项目中运行测试,如果测试通过,则生成其jar文件(如果没有失败) 将jar文件从1)复制到目录accencetests/p
- root-project
- acceptance-tests
- sub-java-proj
验收测试
有一个任务cucumber
(由Gradle cucumber插件提供),该任务在项目中运行cucumber特性。但是,在运行这些功能之前,我需要进行一些引导。特别是,在执行任务之前,Gradle应执行以下操作:
子java项目中运行测试,如果测试通过,则生成其jar文件(如果没有失败)
accencetests/proglib
验收测试
依赖于子java项目
(使用testRuntime配置),但我觉得这是对依赖机制的滥用:这样做的唯一原因是确保在运行验收测试
之前编译子java项目
,但实际上,通过从sub-javaproj
添加jar,这也会扰乱验收测试的类路径,而且传递依赖性也存在问题。简而言之:验收测试
除了复制它的jar之外,不应该与子java项目
有任何关系
关于如何实现这一点的建议非常感谢
更新
到目前为止,我在验收测试/build.gradle
中有以下内容:
task fix(dependsOn: ':sub-java-proj:jar', type: Copy) {
from tasks.getByPath(':sub-java-proj:jar')
to 'proglib'
}
task unfix(type: Delete) {
delete fix
}
cucumber.dependsOn fix
cucumber.finalizedBy unfix
但是,除了取消固定也会删除proglib
目录外,这种方法也可以工作。它应该只删除jar文件。有没有办法解决这个问题?如果需要复制Jar,还需要确保Jar已创建,因此可能需要一个dependsOn
。(Gradle通常可以自动推断任务相关性。)有关复制,请参阅中的Copy
。有关删除,请参见同一参考中的Delete
。对于后者,您可能应该使用finalizedBy
(请参阅)。谢谢。我已经在我的帖子中添加了一个根据您的建议构建的部分解决方案。您必须使用delete pathtobedeletted
。我如何从fix
检索pathtobedeletted
?您无法从fix
获取它。您可以从Jar任务中获取它,例如tasks.getByPath(':sub-javaproj:Jar').outputs.files
。(delete tasks.getByPath(':sub-java-proj:jar')
也可以工作。)更好的解决方案不是直接引用其他项目的jar任务,而是通过项目依赖项(configurations{fix};dependenciences{fix]:sub-java-proj}
等)获取jar,或者将验收测试移动到:sub java proj
。