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

ane*_*rgy 2 java gradle

新手Gradle query.Consider跟随项目的结构

Project
   |
    -component_1

   |
    -component_2
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

Ben*_*hko 10

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

.
??? your-project
    ??? component1
    ?   ??? build.gradle
    ?   ??? src
    ??? component2
        ??? build.gradle
        ??? src
Run Code Online (Sandbox Code Playgroud)

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

apply plugin: 'java'

sourceSets {
   main {
      java {
         srcDirs = ['src']
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:

您可以像Matt在他的评论中解释的那样实现这一点,也可以采用多项目构建方法.我把以下代码示例放在一起给你一个想法.在项目的根级别创建两个文件:build.gradlesettings.gradle.

.
??? your-project
    ??? build.gradle
    ??? settings.gradle
    ??? component1
    ?   ??? src
    ??? component2
        ??? src
Run Code Online (Sandbox Code Playgroud)

settings.gradle文件中包含属于您的构建的项目,如下所示:

include 'component1', 'component2'
Run Code Online (Sandbox Code Playgroud)

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

subprojects {
   apply plugin: 'java'

   sourceSets {
      main {
         java {
            srcDirs = ['src']
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 您仍然可以通过在根目录中包含build.gradle来实现这一点,该目录在`project(':component1'){}`块中配置每个组件构建,即采用build.gradle benjamin描述并将其粘贴到项目中就像我写的一样.如果你没有将它们描述为单独的项目,那么你最终会用一个源集替换项目的概念,而且事情会变得更加复杂,没有明显的好处. (3认同)