gpt4 book ai didi

gradle - 明确将多个应用程序作为具有共同依赖项和共同来源的子项目分开

转载 作者:行者123 更新时间:2023-12-03 03:21:21 25 4
gpt4 key购买 nike

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

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

我正在尝试构建2到4个共享一些通用类但具有不同主类的Java应用程序。我已经在一个项目EG中看到了几种方法,您可以在其中使用application插件,但是禁用脚本的默认值,然后为每个应用程序创建自定义任务。我希望可以通过以下子项目来维护一个更简单的方法来完成此任务:

  • 所有源仍在一个~<project>/src/java/{main,test}/pkg/name/树中
  • 应用程序是子项目,指的是根项目的源
  • build和distInstall任务可构建和安装所有应用程序。

  • 例如。看着( documented) example

    我希望能够使其结构如下:
    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

    最佳答案

    这需要经过反复试验,但是如果让其他人受益,我可以通过以下文件设置(类似于我的问题的布局(其中未提及重要的settings.gradle文件)来解决我的约束)。那么基本的工作设置如下所示:
    结构体

    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
    这些文件的内容如下所示:
    水/settings.gradle
    rootProject.name = 'water'
    include 'whale', 'krill'
    水/建筑等级
    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'
    }
    鲸鱼/settings.gradle
    $task.name = 'whale'
    鲸鱼/build.gradle
    apply plugin: 'application'
    mainClassName = '<namespace>.whale.WhaleApp'

    dependencies {
    compile project(rootProject.path)
    runtime project(rootProject.path)
    }
    磷虾/settings.gradle
    $task.name = 'krill'
    磷虾/ build.gradle
    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脚本,您可以使用该脚本在复制到 lib目录的jar中运行正确的主类。如果仅使用 assemble,则会获得正确的jar,以及 build/scripts中的脚本,但是如果没有jar放在类路径或类似路径上,它们将无法运行。
    仔细考虑一下,我想知道是否不能从定义子项目的任务和设置并指向应用程序插件输出到根项目的 settings.gradle中的单个 build.gradlewater设置完全配置“多项目”设置构建目录。

    关于gradle - 明确将多个应用程序作为具有共同依赖项和共同来源的子项目分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36634581/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com