Java Gradle:当任务运行时,如何将子项目jar复制到另一个子项目?

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

我在Gradle有以下多项目结构:

- root-project
  - acceptance-tests
  - sub-java-proj
验收测试
有一个任务
cucumber
(由Gradle cucumber插件提供),该任务在项目中运行cucumber特性。但是,在运行这些功能之前,我需要进行一些引导。特别是,在执行任务之前,Gradle应执行以下操作:

  • 子java项目中运行测试,如果测试通过,则生成其jar文件(如果没有失败)
  • 将jar文件从1)复制到目录
    accencetests/proglib
  • 像正常一样运行cumber功能
  • 删除在2)中复制的jar文件
  • 我是Gradle的新手,所以我不知道如何正确地实现这一点。我的第一个想法是让
    验收测试
    依赖于
    子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