如何指定一个项目是另一个项目的子集?

时间:2016-02-10 15:23:30

标签: gradle

所以我有一个contracts项目和一个artifacts项目。 artifacts只是为合同添加了一些类,这些合同本身就是WSDL / WADL的严格生成。我只想依赖其中一个,这意味着contracts需要被视为artifacts的一个子集。简而言之,我认为我应该看到的是contracts中生成的所有类文件都应该出现在jar文件和build / classes / main中。是否有基于依赖的方式来执行此操作,还是我坚持使用普通的旧复制任务?

当然,我可能会咆哮错误的树。我是否可以指定对项目的工件的依赖性,这些工件将导致内容(最好)或jar本身(如果必须)始终包含在内?那是什么语法?

2 个答案:

答案 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)

1。将第二个项目中的源添加到sourceSet

在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,但无论您是否这样做都无关紧要。

2。将第二个项目添加为依赖项并创建“uberJar”工件

在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
}