首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清楚地将多个应用程序分离为具有公共依赖和联合源的子项目。

清楚地将多个应用程序分离为具有公共依赖和联合源的子项目。
EN

Stack Overflow用户
提问于 2016-04-14 21:46:46
回答 1查看 460关注 0票数 2

我发现Gradle的多个项目文档对多项目设置中的项目源和输出将位于何处感到困惑和无助。

我希望看到一个使用Java和application插件的具体例子,而不仅仅是编写到标准输出的任务。

我正在尝试构建2-4个java应用程序,它们共享一些公共类,但是有不同的主类。我在一个项目例如中看到了一些方法,您可以在其中使用application插件,但禁用脚本的默认设置,然后为每个应用程序创建自定义任务。我本来希望有一种更简单的方式来通过子项目来实现这一点:

  1. 所有源仍然位于一个~<project>/src/java/{main,test}/pkg/name/树中。
  2. 应用程序是引用根项目的源的子项目。
  3. build和distInstall任务构建和安装所有应用程序。

比如(记录在案) 示例

我希望它的结构如下:

代码语言:javascript
复制
water/
  build.gradle (uses plugin java, builds main and test sourcesets)
  whale/
    build.gradle (uses plugin application for whale.WhaleApp, depends on water proj)
  krill/
    build.gradle (uses plugin application for krill.KrillApp, depends on water proj)
  src/
    java/
      main/<namespace>/
        common/
          Water.java (common utils)
          Life.java (a base class for Whale etc)
        whale/
          WhaleApp.java (main cmd line for Whales)
          Whale.java (extends Life)
        krill/
          KrillApp.java (main cmd line for Krill)
          Krill.java (extends Life)
      test/<namespace>/
        common/
          *Test.java
        whale/
          *Test.java
        krill/
          *Test.java
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-18 18:25:34

这需要一些尝试和错误,但是如果知道我确实通过以下文件设置(类似于我的问题的布局(没有提到重要的settings.gradle文件)解决了这个问题,那么基本工作的设置是这样的:

结构

代码语言:javascript
复制
water/
  settings.gradle
  build.gradle
  whale/
    settings.gradle
    build.gradle
  krill/
    settings.gradle
    build.gradle
  src/
    java/
      main/<namespace>/
        common/
          Water.java
          Life.java
        whale/
          WhaleApp.java
          Whale.java
        krill/
          KrillApp.java
          Krill.java
      test/<namespace>/
        common/
          *Test.java
        whale/
          *Test.java
        krill/
          *Test.java

这些文件的内容如下:

水/设置.分级

代码语言:javascript
复制
rootProject.name = 'water'
include 'whale', 'krill'

水/build.gradle

代码语言:javascript
复制
group 'oceanGroup'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
sourceSets {
  main { java { srcDir 'src/java/main' }}
  test { java { srcDir 'src/java/test' }}
}
repositories { mavenCentral() }
dependencies {
     testCompile group: 'junit', name: 'junit', version: '4.11'
}

鲸鱼/栖息物

代码语言:javascript
复制
$task.name = 'whale'

鲸鱼/build.gradle

代码语言:javascript
复制
apply plugin: 'application'
mainClassName = '<namespace>.whale.WhaleApp'

dependencies {
    compile project(rootProject.path)
    runtime project(rootProject.path)
}

磷虾/安放级

代码语言:javascript
复制
$task.name = 'krill'

磷虾/build.gradle

代码语言:javascript
复制
apply plugin: 'application'
mainClassName = '<namespace>.krill.KrillApp'

dependencies {
    compile project(rootProject.path)
    runtime project(rootProject.path)
}

现在,如果您发出gradle installDist,它将在每个子项目中创建一个build/install/$task.name/bin/$task.name脚本,用于运行jar中复制到lib目录的正确的主类。如果您只使用assemble,您将得到正确的jar,以及build/scripts中的脚本,但是如果没有类路径上的jar或诸如此类的东西,它们将无法运行。

不过,考虑一下,我想知道“多项目”设置是否不能完全通过定义子项目的任务和设置的单个settings.gradlebuild.gradle集配置,并将应用程序插件指向根项目的构建目录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36634581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档