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

Gradle 如何指定一个项目是另一个项目的子集?,gradle,Gradle,所以我有一个合同项目和一个工件项目工件只是向契约添加了几个类,契约本身就是严格的WSDL/WADL生成。我只想依赖其中一个,这意味着契约需要被视为工件的子集。简而言之,我认为我应该看到的是契约中生成的所有类文件都应该显示在jar文件和build/classes/main中。是否有一种基于依赖关系的方法来实现这一点,还是我一直在执行普通的旧拷贝任务 当然,我可能找错人了。我是否可以指定一个对项目工件的依赖关系,使内容(最好)或jar本身(如果必须)始终被包括在内?这是什么语法?将一个项目作为另一个

所以我有一个
合同
项目和一个
工件
项目<代码>工件只是向契约添加了几个类,契约本身就是严格的WSDL/WADL生成。我只想依赖其中一个,这意味着
契约
需要被视为
工件的子集。简而言之,我认为我应该看到的是
契约中生成的所有类文件都应该显示在jar文件和build/classes/main中。是否有一种基于依赖关系的方法来实现这一点,还是我一直在执行普通的旧拷贝任务


当然,我可能找错人了。我是否可以指定一个对项目工件的依赖关系,使内容(最好)或jar本身(如果必须)始终被包括在内?这是什么语法?

将一个项目作为另一个项目的依赖项包含的语法是:

dependencies {
    compile project(':<project>')
    ...
}
如果您希望project2依赖于project1,您将包括:

compile project(':project1')

在project2的build.gradle文件中。

将一个项目包含为另一个项目的依赖项的语法为:

dependencies {
    compile project(':<project>')
    ...
}
如果您希望project2依赖于project1,您将包括:

compile project(':project1')
在project2的build.gradle文件中。

1。将第二个项目中的源添加到源集中 在GradleJava项目中,可以添加任意目录作为源位置。因此,如果您的结构如下所示:

├───ProjA
│   └───src
│       └───main
│           └───java
└───ProjB
    └───src
        └───main
            └───java
您可以将projB的源添加到projA的源集中。当然,你会打破gradle惯例,如果你移动文件夹,你必须意识到打破路径,但在ProjA的build.gradle中,你可以做到:

sourceSets.main.java.srcDir "$rootDir/../ProjB/src/main/java"
这将把指定的目录添加到编译期间使用的sourceSet中,生成的.class文件将包含在您创建的jar工件中

您可以继续单独构建projB,但您是否这样做并不重要

2.添加第二个项目作为依赖项,并创建一个“uberJar”工件 在projA build.gradle中,可以将projB作为编译时依赖项添加,也可以作为项目
编译项目(':projB')
作为jar依赖项
编译'mygroup:projB:1.0'

在工件创建时,您可以使用或添加uberjar任务,以解压缩所有依赖项,并将类和资源包含在您生成的jar中

task uberJar(type: Jar) {
    //collect all dependencies
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}
1.将第二个项目中的源添加到源集中 在GradleJava项目中,可以添加任意目录作为源位置。因此,如果您的结构如下所示:

├───ProjA
│   └───src
│       └───main
│           └───java
└───ProjB
    └───src
        └───main
            └───java
您可以将projB的源添加到projA的源集中。当然,你会打破gradle惯例,如果你移动文件夹,你必须意识到打破路径,但在ProjA的build.gradle中,你可以做到:

sourceSets.main.java.srcDir "$rootDir/../ProjB/src/main/java"
这将把指定的目录添加到编译期间使用的sourceSet中,生成的.class文件将包含在您创建的jar工件中

您可以继续单独构建projB,但您是否这样做并不重要

2.添加第二个项目作为依赖项,并创建一个“uberJar”工件 在projA build.gradle中,可以将projB作为编译时依赖项添加,也可以作为项目
编译项目(':projB')
作为jar依赖项
编译'mygroup:projB:1.0'

在工件创建时,您可以使用或添加uberjar任务,以解压缩所有依赖项,并将类和资源包含在您生成的jar中

task uberJar(type: Jar) {
    //collect all dependencies
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

我希望项目1包括项目2。如果我使用像这样的标准依赖项,我会得到一个依赖于另一个jar项目的项目,而不是一个包含另一个项目的项目。例如,项目2的jar文件将不包含来自项目1的文件。我确实在jar任务中找到了如何做到这一点,但后来我的构建失败了。我想这是因为gradle不像maven那样依赖JAR。你所说的包含是什么意思?你是说把project2类打包到Project1JAR中吗?还有,你为什么要这么做?模块化通常是好的。我的意思是项目2是项目1的子集。如果没有项目1,就不可能使用项目2。我们希望它们分开的原因是,项目2代表了大量的XML生成。这是一个很好的理由,但这只是一个构建的理由。请注意,maven正是这样做的。它在项目2中构建XML,然后项目1构建聚合,子项目仅依赖于项目1。如果我使用像这样的标准依赖项,我会得到一个依赖于另一个jar项目的项目,而不是一个包含另一个项目的项目。例如,项目2的jar文件将不包含来自项目1的文件。我确实在jar任务中找到了如何做到这一点,但后来我的构建失败了。我想这是因为gradle不像maven那样依赖JAR。你所说的包含是什么意思?你是说把project2类打包到Project1JAR中吗?还有,你为什么要这么做?模块化通常是好的。我的意思是项目2是项目1的子集。如果没有项目1,就不可能使用项目2。我们希望它们分开的原因是,项目2代表了大量的XML生成。这是一个很好的理由,但这只是一个构建的理由。请注意,maven正是这样做的。它在项目2中构建XML,然后项目1构建聚合,子项目仅依赖于项目1。为什么它们首先作为单独的项目组织,而不是在同一项目中作为单独的包组织?您可以通过两种方式解决这个问题:您可以将工件项目的源文件夹包含到contracts sourceset中,或者您可以使用自定义jar任务(或影子插件)将工件类打包到contracts jar.XML生成中,如下所述。Hmmm。。。。跳过契约中的*.class文件生成,并在javaCompile for artifacts中包含*.java源代码集?那可能是朱