在我的根项目中,我有三个目录。我们把它们叫做A、B和C。所有这些目录都包含一些带有.java文件的目录。这些文件以某种方式相互依赖。现在,当我运行gradle构建任务时,gradle会创建rootDir/build/classes目录。但所有这些.class文件都是混合的。我想有类/A/<一些.class文件>,类/B/<一些.class文件>和类/C/<一些.class文件>。相反,我把它们都放在一个类/主下。现在我的sourceSets看起来像这样:
sourceSets {
main {java {
srcDirs "A/src"
srcDirs "B/src"
srcDirs "C/src"
}}}
我试着创造出这样一种不同的结构:
sourceSets {
A {java {srcDirs "A/src"}}
B {...}
C {...}}
然后,当我尝试运行此任务时:
task A(type:Jar) {
from sourceSets.A.output.classesDirs
from sourceSets.A.java.srcDirs
include '**/*.class'
archiveFileName = "A.jar"}
显然我得到了编译错误,因为这些类无法找到来自B和C的方法。有没有办法解决这个问题,或者我将被迫改变我的代码结构?
1条答案
按热度按时间2izufjch1#
要基于Gradle构建中的目录A、B和C实现所需的类文件分离,您可以为每个源集使用不同的配置,并指定它们之间的依赖关系。这样,您可以控制每个目录的类文件输出,并确保在编译期间正确解析依赖项。
以下是设置Gradle构建的分步方法:
1.定义源集:为目录A、B和C定义单独的源集。
sourceSets { A { java.srcDirs ='A/src']} B { java.srcDirs ='B/src']} C { java.srcDirs ='C/src']} }
1.定义依赖关系:指定源集之间的依赖关系,以确保A可以使用B和C中的类,B可以使用C中的类。
依赖项{A实现项目(“:B”)B实现项目(“:C”)}
根据您的项目结构,将
AImplementation
和BImplementation
替换为适当的配置。1.配置防毒墙任务:配置防毒墙网络版任务,使其包括每个源集的特定类目录。
任务AJar(类型:Jar){ from sourceSets.A.output archiveFileName =“A.jar”}
任务BJar(类型:Jar){ from sourceSets.B.output archiveFileName =“B.jar”}
任务CJar(类型:Jar){ from sourceSets.C.output archiveFileName =“C.jar”}
jar.dependsOn AJar,BJar,CJar
在此设置中,我们为每个源集(A、B、C)定义了单独的MySQL任务,并将它们配置为包含相应的输出目录。此外,我们还在源代码集之间建立了依赖关系,以确保在编译期间正确解析类文件。
然后可以运行
gradle AJar
、gradle BJar
或gradle CJar
为每个源集生成JAR文件。根据您的特定项目结构和要求调整依赖项和配置。