【问题标题】:Gradle flat project with multiple Jars in one projectGradle flat 项目在一个项目中包含多个 Jar
【发布时间】:2013-06-19 22:20:19
【问题描述】:

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

Project
   |
    -component_1

   |
    -component_2

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

更新:

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

【问题讨论】:

  • 基本方法是通过 {{project.artifact}} 添加内容,并可能将组件表示为命名的源集,但我想说如果没有一些额外的上下文,很难编写一个好的答案.例如你为什么不想使用多项目?你打算用这些罐子做什么,在某个地方发布它们?它们是相关的还是独立的?它们是纯 Java 源代码还是其他?
  • 谢谢 问:为什么不用多项目? A:现有代码,不能改变结构 Q:jar 怎么办? A:将它们打包成单个档案,但以后可能会独立发布它们 Q:相关? A:其中一些是相关的。

标签: java gradle


【解决方案1】:

您提到某些组件相互依赖,所以我也想知道您为什么不想将其作为多项目构建来实现。现在,让我们假设您的所有组件都是独立的 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']
         }
      }
   }
}

【讨论】:

  • +1 作为答案,但我更愿意将单个构建文件保留在组件之外。
  • 您仍然可以通过在根目录中包含一个 build.gradle 来做到这一点,该目录在 project(':component1') { } 块中配置每个组件构建,即获取本杰明描述的 build.gradle 并将其粘贴到项目中像我写的那样阻止。如果您不将它们描述为单独的项目,那么您最终将用源集替换项目的概念,并且事情会变得更加复杂而没有明显的好处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 2012-11-26
  • 2014-03-31
  • 2018-05-28
相关资源
最近更新 更多