Aru*_*gal 13 java groovy compilation class gradle
我的项目有Java(N文件)和Groovy代码(仅1个文件).Java编译依赖于这个单个Groovy文件的Java编译类文件(compileJava任务成功).
当我不使用src/java作为main> groovy> sourceSet部分中的srcDir之一时,我得到一个错误,说明找不到类/符号,这是在groovy文件/类中.在ANT中,我们很容易在调用compile-java目标之前首先调用compile-groovy目标,但Gradle中的相同内容是我正在尝试查找的内容.
我读了一些帖子,发现如果我将main> java section设为NULL并为main> java指定srcDir,这是src/java里面的main> groovy sourceSet部分,那么它编译得很好.
我的:1.还有其他办法吗?对于前者,以下应该工作:
compileJava {
dependsOn compileGroovy
}
Run Code Online (Sandbox Code Playgroud)
但是,这是一个infinte循环.
要么
如何使用doFirst进行compileJava任务:
compileJava {
doFirst {
compileGroovy
}
}
Run Code Online (Sandbox Code Playgroud)
这也行不通.
build.gradle这是有效的,但是在某种意义上compileRava在这里变得无用,即使源代码有N否.src/java或src/java-test等树中的java文件.我知道这个构建脚本正在运行,但从逻辑上讲,如果他/她不熟悉为什么源代码为Groovy必须将"src/java"作为其srcDir值,它可能会给开发人员带来一些困惑.
apply plugin: 'java'
apply plugin: 'groovy'
sourceSets {
main {
groovy {
srcDir 'src/groovy'
srcDir 'src/java'
}
java {
//The following needs to be commented out OR Gradle will always pick compileJava before compileGroovy
//srcDir 'src/java'
//srcDir 'src/java-test'
}
}
test {
groovy {
srcDir 'test/groovy'
}
java {
srcDir 'test/java'
}
resources {
srcDir 'test/resources'
srcDir 'conf'
}
}
integrationTest {
groovy {
srcDir 'src/groovy-test'
}
java {
srcDir 'src/java-test'
}
resources {
srcDir 'test/resources'
srcDir 'conf'
}
}
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*ser 32
Groovy(基础)插件使GroovyCompile任务依赖于相应的JavaCompile任务,因为从Groovy调用Java比通过其他方式更常见.如果你需要反过来(或两种方式),联合编译是一个很好的解决方案.这是一个有点改进(在您的版本上)联合编译设置:
sourceSets {
main {
groovy {
// override the default locations, rather than adding additional ones
srcDirs = ['src/groovy', 'src/java']
}
java {
srcDirs = [] // don't compile Java code twice
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢仅使用Java-> Groovy依赖项进行单独编译,则以下内容应该可以正常工作:
// since you aren't using the default locations
sourceSets {
main {
groovy {
srcDirs = ['src/groovy']
}
java {
srcDirs = ['src/java']
}
}
}
// remove GroovyCompile->JavaCompile task dependencies
tasks.withType(GroovyCompile) {
dependsOn = []
}
// add JavaCompile->GroovyCompile task dependencies
tasks.withType(JavaCompile) { task ->
dependsOn task.name.replace("Java", "Groovy")
}
Run Code Online (Sandbox Code Playgroud)
因为JavaCompile任务及其相应的GroovyCompile任务写入同一输出目录,所以Java编译现在将在其编译类路径上具有已编译的Groovy代码.
PS:不支持从另一个任务调用任务,如果你尝试,可能会发生不好的事情.相反,你应该总是与工作关系的工作(dependsOn,finalizedBy,mustRunAfter,shouldRunAfter).
| 归档时间: |
|
| 查看次数: |
7334 次 |
| 最近记录: |