我的项目既有Java(N个文件)又有Groovy代码(只有1个文件)。Java compile依赖于这个单个Groovy文件的类文件进行Java编译(compileJava任务成功)。
当我不使用src/java作为main>groovy>sourceSet部分中的一个srcDir时,我会得到一个错误,说明在groovy文件/class中找不到class/symbol。在ANT中,我们很容易首先调用compile-groovy目标,然后再调用compile-java目标,但在Gradle中也是这样。
我读了一些帖子,发现如果我将main>java部分设为空,并为main>java指定srcDir,这是main>groovy sourceSet部分中的src/java,那么它的编译就很好。
我的?S:1。还有别的办法吗?对于ex,以下操作应起作用:
compileJava {
dependsOn compileGroovy
}
不过,这是一个无限循环。
对于compileJava任务使用doFirst怎么样:
compileJava {
doFirst {
compileGroovy
}
}
这也不管用。
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'
}
}
}
其他链接:如何让Gradle在Java测试之前编译Groovy测试
Groovy(base)插件使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
}
}
}
如果您喜欢只使用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")
}
因为javacompile
任务及其对应的groovycompile
任务写入同一个输出目录,所以Java编译现在将在其compile类路径上拥有已编译的Groovy代码。
PS:不支持从另一个任务调用一个任务,如果你尝试的话可能会发生不好的事情。相反,您应该始终使用任务关系(dependson
、finalizedby
、mustrunafter
、shouldrunafter
)。
我正在使用mongodb和Spring Boot。最近,我的mongodb升级到了3.0版本。 我对Spring使用以下Gradle依赖项: 如果我查看maven存储库中的gradle:,我会看到以下内容(http://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb/1.2.6
问题内容: 假设我想在项目中添加guice-assistedinject作为依赖项。它将guice工件指定为依赖项本身。如何告诉它使用guice的no_aop版本? 我知道我可以执行以下操作,但是我可以一步完成而不排除guice模块吗? 问题答案: 没有更简单的解决方案。您可以使用简短的依赖性表示法(例如)来缩短代码。
本文向大家介绍gradle 依赖于另一个Gradle项目,包括了gradle 依赖于另一个Gradle项目的使用技巧和注意事项,需要的朋友参考一下 示例 对于多项目gradle构建,有时可能需要依赖构建中的另一个项目。为此,请在项目的依赖项中输入以下内容: ':OtherProject'从目录结构的根引用的项目gradle路径在哪里。 为了':OtherProject'在build.gradle文
我正在学习创建java ee web应用程序。在intellij idea中,我使用项目向导创建了一个项目:Java Enterprise->Web Application。然后,我在项目根中创建了一个构建文件.gradle,并在终端中调用、。这是构建文件。Gradle 当我添加依赖项并进行渐进式构建时,它们不会加载到项目中。例如,Gson库在代码中不可用。如何告诉Gradle下载这些库以便我可以
到 。 让我惊讶的是,通过创建的fat jar不再包含下所需的lib了吗?如果我将“实现”替换为“编译”,它就会像预期的那样工作。 有什么东西需要配置以便spring-boot-plugin添加它们吗?还是需要提前将项目升级到spring Boot2?