2017-04-07 30 views
1

我有项目A与gradle构建。我还有另一个项目B,也有Gradle构建。我想将项目B的jar包括到项目A的战争中。我可以从项目A的构建脚本中调用项目B的构建脚本(参见下文)。
但是我不能将项目B的jar设置为任务buildB的输出文件。如何从GradleBuild任务设置另一个Gradle构建脚本任务的输出文件?

是否有任何方法将任务buildB的输出文件设置为项目B的jar(它是任务jar的输出文件)?

task buildB(type: GradleBuild) { 
    buildFile = "../BProject/build.gradle" 
    tasks = ["clean", "jar"]  // jar task produce xxx.jar as it's outputs.files 

    // HERE, any script to set xxx.jar as outputs.files of task buildB??? 
} 

war { 
    from (buildB) {    // can not get xxx.jar from buildB 
     into "WEB-INF/classes" 
    } 
} 
+0

我猜你需要建立一个多模块项目,并定义一个'型项目的compile'依赖。 – Opal

回答

0

这就是我所做的。

/settings.gradle

include 'AProject', 'BProject' 

/AProject/build.gradle

task buildB(type: GradleBuild) { 
    buildFile = "../BProject/build.gradle" 
    tasks = ["clean", "jar"]  // jar task produce xxx.jar as it's outputs.files 
} 

war { 
    dependsOn buildB 
    doFirst { 
     from (project(':BProject').tasks['jar']) { 
      into "WEB-INF/classes" 
     } 
    } 
} 
2

你可能需要配置multi module项目并定义project -scope依赖。

既然答案完整答案将会很长,here你可以找到一个演示,说明如何完成。

该演示包含两个项目。一个项目是为了战争而建立的,并且依赖于另一个为战争而建的项目。如果您构建a项目,b将自动构建并作为jar包含。

+0

谢谢你的回答,欧泊。但是buildA不依赖于buildB的jar,它只使用jar作为可下载的资源。所以它不需要将项目B定义为编译依赖关系。 但是你的回答和github源码让我想到了多项目,所以我想出了一个解决方案。再次感谢! – hanjoonk

相关问题