在一个项目中使用多个Jars平面项目

时间:2013-06-13 09:19:19

标签: java gradle

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

Project
   |
    -component_1

   |
    -component_2

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

中做到这一点

更新

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

1 个答案:

答案 0 :(得分:11)

你提到一些组件相互依赖,所以我也想知道为什么你不想将它作为一个多项目构建来实现。现在,让我们假设您的所有组件都是独立的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将编译您的生产和测试源代码,运行您的单元测试并在目录build/libs下汇编JAR文件。

修改

您可以按照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']
         }
      }
   }
}