用手册编写:
即。 src/sourceSet/java
是“给定源集的Java源代码”的默认路径。
如何利用这个?假设我希望创建源集demo
。
我可以写
吗?sourceSets {
demo {
java {
srcDir 'src/demo/java'
}
resources {
srcDir 'src/demo/resources'
}
}
}
我可以在没有明确路径的情况下以某种方式写作吗?
可能我不需要写任何东西,只需将文件放入demo子文件夹?
更新
我已经测试了
sourceSets {
demo {
java {
srcDir 'src/demo/java'
}
resources {
srcDir 'src/demo/resources'
}
}
}
和
sourceSets {
demo {
java
resources
}
}
和
sourceSets {
demo
}
在所有情况下,运行gradle build
都不会导致编译源。
build.gradle
文件如下:
group 'net.inthemoon.tests'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.5
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
sourceSets {
demo {
java {
srcDir 'src/demo/java'
}
resources {
srcDir 'src/demo/resources'
}
}
}
答案 0 :(得分:2)
这应该是你所需要的:
sourceSets {
demo
}
可能需要更多配置来定义这些源的依赖关系以及它们应该在何处使用。
答案 1 :(得分:2)
Gradle默认任务不会构建非默认源集,除非主链中存在明确的依赖关系。为了编译您的demo
课程,您必须根据cricket_007的答案致电gradle demoClasses
- 或者更好的是,只需执行gradle build demo
,这也将生成目标jar中的类。
所有你需要的是:
sourceSets {
demo
}
... build demo
任务确实会按预期创建任何丢失的目录,除非你有一些奇怪的权限方案生效。
现在我看了你的git项目,看起来你的演示源集依赖于主类。您需要清除此依赖关系(即将它们添加到demo
类路径)以避免编译错误:
sourceSets {
main
demo {
compileClasspath += main.output
runtimeClasspath += main.output
}
}
答案 2 :(得分:1)
全新的IntelliJ Java Gradle项目。 (免责声明:有一个设置可以自动创建我自动创建的空源目录)
添加后,它创建了该demo目录及其下的资源。
sourceSets {
demo
}
要编译您可以运行的其他sourceSet
gradlew demoClasses
答案 3 :(得分:0)
如gradle's documentation中所述并已在其他答案中提及,要添加新的源集,应该足以写:
sourceSets {
demo {
compileClasspath += main.output
}
}
Java插件会自动将相应的compileDemoJava
和processDemoResources
任务添加到您的构建中。
要在常规构建期间自动执行这些任务,您可以向默认任务添加依赖项:
tasks.compileJava.dependsOn compileDemoJava
或者相反:
tasks.compileJava.finalizedBy compileDemoJava
要将新源集的输出添加到某个分发文件,您需要定义相应的任务并将此任务的输出声明为构建的工件:
task demoJar(type: Jar) {
from sourceSets.demo.output
}
artifacts {
archives demoJar
}
有关发布内容的进一步阅读,请参阅here
更新:
main.output
来编译@Amine