如何在具有多个src目录的gradle sourceset中维护结构

toiithl6  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(116)

在我的根项目中,我有三个目录。我们把它们叫做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的方法。有没有办法解决这个问题,或者我将被迫改变我的代码结构?

2izufjch

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”)}
根据您的项目结构,将AImplementationBImplementation替换为适当的配置。
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 AJargradle BJargradle CJar为每个源集生成JAR文件。根据您的特定项目结构和要求调整依赖项和配置。

相关问题