0

这是一个基本的 gradle 问题,但我找不到答案:如果我有多个独立的项目共享同一个根目录,我应该如何为它们使用不同的 build.gradle 文件?

例如目录结构是这样的:

src/main/java/package1/base1/project1package/

src/main/java/package1/base1/project2package/

看起来 build.gradle 文件应该放在根目录下,但是如何区分两个完全独立且彼此不相关的项目呢?使用 gradle build 命令时,如何指定要构建的项目?谢谢。

4

2 回答 2

0

如果我不在基地,请告诉我,但基本上我认为您想要做的只是从恰好位于同一根目录中的两组源中生成两个单独的 JAR。正如@Tomas 所提到的,这是一种非常有趣的项目结构方式,但假设您无法更改项目结构,您可以简单地创建自定义源集来解决这个问题。

您的构建可能看起来像这样。

apply plugin: 'java-base'

sourceSets {
    projA {
        java {
            srcDir 'src/main/java'
            include 'pkg1/**'
        }
    }
    projB {
        java {
            srcDir 'src/main/java'
            include 'pkg2/**'
        }
    }
}

task projAJar(type: Jar) {
    baseName 'projA'
    from sourceSets.projA.output
}

task projBJar(type: Jar) {
    baseName 'projB'
    from sourceSets.projB.output
}

虽然这在技术上是一个Gradle 项目,但这两个源集各有自己的编译任务、jar 任务和配置。您将像这样配置您的依赖项。

dependencies {
    projACompile 'foo.org:lib:1.0'
    projBCompile 'bar.org:lib:2.0'
}
于 2014-09-23T21:18:30.487 回答
0

老实说,我不喜欢你提出的结构。标准的看起来像这样:

    <root>/build.gradle

    <root>/<subproject1>/build.gradle
    <root>/<subproject1>/src/main/java/<basepackage>/<subproject1>/

    <root>/<subproject2>/build.gradle
    <root>/<subproject2>/src/main/java/<basepackage>/<subproject2>/

subproject1和subproject2相互独立。而且:

  • <root>/build.gradle可以包含所有子项目通用的构建配置、任务等。然后是 subproject1 特定的东西<root>/<subproject1>/build.gradle
  • 如果执行gradle buildin <root>/,所有子项目都会被构建。如果您在 <root>/<subproject1>/ 中执行此操作,则只会构建subproject1 。

有关更多信息,请参阅http://www.gradle.org/docs/current/userguide/multi_project_builds.html

于 2014-09-23T21:10:00.240 回答