Java 如何定义自定义源集而不定义它';在Gradle中显式地显示s路径?
它是用手册写的: 也就是说,Java 如何定义自定义源集而不定义它';在Gradle中显式地显示s路径?,java,gradle,Java,Gradle,它是用手册写的: 也就是说,src/sourceSet/java是“给定源代码集的java源代码”的默认路径 如何利用这一点?假设我希望创建源代码集demo 我可以写信吗 sourceSets { demo { java { srcDir 'src/demo/java' } resources { srcDir 'src/demo/resources' } } }
src/sourceSet/java
是“给定源代码集的java源代码”的默认路径
如何利用这一点?假设我希望创建源代码集demo
我可以写信吗
sourceSets {
demo {
java {
srcDir 'src/demo/java'
}
resources {
srcDir 'src/demo/resources'
}
}
}
我是否可以在没有显式路径的情况下进行书写
我可能不需要写任何东西,只是把文件放进演示子文件夹
更新
我已经测试过了
sourceSets {
demo {
java {
srcDir 'src/demo/java'
}
resources {
srcDir 'src/demo/resources'
}
}
}
及
及
在所有情况下,运行gradlebuild
不会导致编译源代码
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'
}
}
}
示例项目:这应该是您所需要的全部:
sourceSets {
demo
}
可能需要更多的配置来定义这些源的依赖关系以及它们的使用位置。全新的IntelliJ Java Gradle项目。(免责声明:我选中了自动创建空源目录的设置) 添加此项后,它创建了该演示目录及其下的资源
sourceSets {
demo
}
要编译附加的sourceSet
,可以运行
gradlew demoClasses
Gradle默认任务不会生成非默认源集,除非在主链中存在对它们的显式依赖。为了编译您的
demo
类,您必须按照cricket_007的回答调用gradle demoClasses
——或者更好的做法是,只需执行gradle build demo
,这也会将生成的类放入目标jar中
您所需要的就是:
sourceSets {
demo
}
。。。而builddemo
任务确实会像预期的那样创建任何丢失的目录,除非您有一些奇怪的有效权限方案
现在我看了一下您的git项目,您的演示源代码集似乎取决于主类。您需要明确此依赖关系(即将它们添加到demo
classpath)以避免编译错误:
sourceSets {
main
demo {
compileClasspath += main.output
runtimeClasspath += main.output
}
}
如其他答案中所述,要添加新的源集,只需编写:
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
}
有关发布内容的更多信息,请参阅
更新:
- 添加了
,以编译@Amine建议的演示源集的类路径main.output
Gradle
IntelliJ
独立读取build.gradle
,对其的解释可能与gradle
本身不同。我知道它在这里更有效,这没关系。问题是关于Gradle
@Dims您可能需要一个来创建这些目录,但是java
插件应该默认创建src/sourceSet/main
和src/sourceSet/resources
文件夹,而没有其他指定的编译过程,应该创建这些目录。我说的是build
子目录下的目录。你是什么意思?build
任务将查看源集并将文件编译为/build/classes/sourceSet
和/build/resources/sourceSet
,理想情况下,您应该使用多模块设置来捆绑所有资源和类,而且不是一个单一的多源集模块。@Dims如果您执行gradle build demo
,您能说什么不起作用吗?然后运行gradle compileDemo
,或者查找添加到您的项目中的任务。您从哪里获得了compileClasspath
和runtimeClasspath
等名称?@Dims它在这里定义:。关于如何在网上使用这个,有很多例子。
tasks.compileJava.finalizedBy compileDemoJava
task demoJar(type: Jar) {
from sourceSets.demo.output
}
artifacts {
archives demoJar
}