2

新手 Gradle 查询。考虑以下项目结构

Project
   |
    -component_1

   |
    -component_2

我想从每个组件源生成一个 jar,它位于 src 目录下。请注意,这不是一个多项目场景,而是一种多组件。我如何在 Gradle (1.6) 中做到这一点

更新:

需要一个构建文件,而不是每个组件都有单独的构建

4

1 回答 1

10

您提到某些组件相互依赖,所以我也想知道为什么您不想将其作为多项目构建来实现。现在,让我们假设您的所有组件都是独立的 Gradle 项目。鉴于它们生成了一个 JAR 文件,它们似乎是 Java 项目。我会build.gradle为每个项目创建一个文件。

.
└── your-project
    └── component1
    │   ├── build.gradle
    │   └── src
    └── component2
        ├── build.gradle
        └── src

对于这些项目中的每一个,我们将应用 Java 插件。此插件引入的标准约定的唯一区别是您的源文件位于目录中,src而不是src/main/java. build.gradle要进行配置,您只需将以下内容放入文件中:

apply plugin: 'java'

sourceSets {
   main {
      java {
         srcDirs = ['src']
      }
   }
}

如果您gradle build为任何项目执行,Gradle 将编译您的生产和测试源代码,运行您的单元测试并在目录下组装 JAR 文件build/libs

编辑:

您可以按照 Matt 在他的评论中解释的方式实现这一点,也可以采用多项目构建方法。我整理了以下代码示例来为您提供思路。在项目的根级别创建两个文件:build.gradlesettings.gradle.

.
└── your-project
    ├── build.gradle
    ├── settings.gradle
    ├── component1
    │   └── src
    └── component2
        └── src

settings.gradle文件中包含作为您构建的一部分的项目,如下所示:

include 'component1', 'component2'

然后在您的build.gradle文件中,您只需将项目定义放入subprojects配置块中即可定义一次。这意味着它适用于您构建的所有子项目。使用这种方法,您可以定义常见行为而无需重复代码。

subprojects {
   apply plugin: 'java'

   sourceSets {
      main {
         java {
            srcDirs = ['src']
         }
      }
   }
}
于 2013-06-18T17:47:57.657 回答