我发现Gradle的多个项目文档对多项目设置中的项目源和输出将位于何处感到困惑和无助。
我希望看到一个使用Java和application插件的具体例子,而不仅仅是编写到标准输出的任务。
我正在尝试构建2-4个java应用程序,它们共享一些公共类,但是有不同的主类。我在一个项目例如中看到了一些方法,您可以在其中使用application插件,但禁用脚本的默认设置,然后为每个应用程序创建自定义任务。我本来希望有一种更简单的方式来通过子项目来实现这一点:
~<project>/src/java/{main,test}/pkg/name/树中。我希望它的结构如下:
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发布于 2016-04-18 18:25:34
这需要一些尝试和错误,但是如果知道我确实通过以下文件设置(类似于我的问题的布局(没有提到重要的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这些文件的内容如下:
水/设置.分级
rootProject.name = 'water'
include 'whale', 'krill'水/build.gradle
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'
}鲸鱼/栖息物
$task.name = 'whale'鲸鱼/build.gradle
apply plugin: 'application'
mainClassName = '<namespace>.whale.WhaleApp'
dependencies {
compile project(rootProject.path)
runtime project(rootProject.path)
}磷虾/安放级
$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脚本,用于运行jar中复制到lib目录的正确的主类。如果您只使用assemble,您将得到正确的jar,以及build/scripts中的脚本,但是如果没有类路径上的jar或诸如此类的东西,它们将无法运行。
不过,考虑一下,我想知道“多项目”设置是否不能完全通过定义子项目的任务和设置的单个settings.gradle和build.gradle集配置,并将应用程序插件指向根项目的构建目录。
https://stackoverflow.com/questions/36634581
复制相似问题