所以我有一个contracts
项目和一个artifacts
项目。 artifacts
只是为合同添加了一些类,这些合同本身就是WSDL / WADL的严格生成。我只想依赖其中一个,这意味着contracts
需要被视为artifacts
的一个子集。简而言之,我认为我应该看到的是contracts
中生成的所有类文件都应该出现在jar文件和build / classes / main中。是否有基于依赖的方式来执行此操作,还是我坚持使用普通的旧复制任务?
当然,我可能会咆哮错误的树。我是否可以指定对项目的工件的依赖性,这些工件将导致内容(最好)或jar本身(如果必须)始终包含在内?那是什么语法?
答案 0 :(得分:0)
将一个项目作为另一个项目的依赖项包含在内的语法是:
dependencies {
compile project(':<project>')
...
}
这假设使用包含所有子项目的settings.gradle
设置了gradle构建。因此,要使一个项目依赖于另一个项目,settings.gradle
将包含:
include 'project1'
include 'project2'
如果您希望project2依赖于project1,您将包括:
compile project(':project1')
在project2的build.gradle文件中。
答案 1 :(得分:0)
在gradle java项目中,可以添加任意目录作为源位置。因此,如果您的结构如下所示:
├───ProjA
│ └───src
│ └───main
│ └───java
└───ProjB
└───src
└───main
└───java
您可以将projB的源添加到projA的sourceset中。当然你要破坏gradle惯例,如果移动文件夹你必须意识到破坏路径,但是在ProjA的build.gradle中,你可以这样做:
sourceSets.main.java.srcDir "$rootDir/../ProjB/src/main/java"
这会将指定的目录添加到编译期间使用的sourceSet中,并且生成的.class文件将包含在您创建的jar工件中。
您可以继续单独构建projB,但无论您是否这样做都无关紧要。
在projA build.gradle中,您将projB添加为编译时依赖项,作为项目compile project(':projB')
作为jar依赖项compile 'mygroup:projB:1.0'
在工件创建时,您可以使用gradle shadow plugin或添加uberjar任务来解压所有依赖项,并在您生成的jar中包含类和资源。
task uberJar(type: Jar) {
//collect all dependencies
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}