我发现Gradle的多个项目文档令人困惑,并且对多项目设置中项目的源和输出所在的位置无关。
我希望看到一个使用Java和application
插件的具体示例,而不仅仅是写入标准输出的任务。
我正在尝试构建2到4个Java应用程序,这些应用程序共享一些公共类但具有不同的主类。我已经在一个项目中EG看到了一些方法,您可以使用application
插件但禁用脚本'默认值然后为每个应用程序创建自定义任务。我希望可能有一个更简单的维护方法来实现这个子项目,以便:
~<project>/src/java/{main,test}/pkg/name/
树E.G。查看(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
答案 0 :(得分:1)
它需要一些试验和错误,但是如果它让其他任何人知道我通过执行以下文件设置来解决这个问题(类似于我的问题的布局(其中重要的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'
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'
apply plugin: 'application'
mainClassName = '<namespace>.whale.WhaleApp'
dependencies {
compile project(rootProject.path)
runtime project(rootProject.path)
}
$task.name = 'krill'
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
water
设置来定义子项目'任务和设置,并将应用程序插件指向输出到根项目的构建目录。