GradleGroovy插件似乎删除了已编译的Java类

GradleGroovy插件似乎删除了已编译的Java类,java,groovy,gradle,Java,Groovy,Gradle,当我试图编译使用groovy作为脚本语言的项目时,我得到了一个非常奇怪的效果。设置非常简单: 我有一个可以通过groovy脚本配置的java应用程序。配置文件的解析全部由groovy代码处理,并生成几个类,这些类包含从脚本提取的信息,这些信息可供java应用程序使用 配置类都实现接口,以解耦groovy方面,从而使java应用程序不知道它实际上与groovy对象对话 因此,对于接口,我这里唯一的依赖是从groovy到java。这应该是正常情况,因为groovy插件默认在compileGroovy

当我试图编译使用groovy作为脚本语言的项目时,我得到了一个非常奇怪的效果。设置非常简单:

我有一个可以通过groovy脚本配置的java应用程序。配置文件的解析全部由groovy代码处理,并生成几个类,这些类包含从脚本提取的信息,这些信息可供java应用程序使用

配置类都实现接口,以解耦groovy方面,从而使java应用程序不知道它实际上与groovy对象对话

因此,对于接口,我这里唯一的依赖是从groovy到java。这应该是正常情况,因为groovy插件默认在
compileGroovy
之前执行
compileJava

这工作一直持续到今天

几个小时前,事情开始变得奇怪。尝试使用
gradletest
测试我的应用程序时,错误告诉我groovy类看不到java接口。我试图用
compileJava
compileGroovy
分别编译java和groovy,但注意到后者只是删除java任务生成的所有类文件。使用
--info
选项运行时,我还发现一个奇怪的输出:

Output file /home/tomas/projects/unnecessary-wizard/build/classes/main has changed.
Output file /home/tomas/projects/unnecessary-wizard/build/classes/main/de/tlongo/unneccesarywizard/java/core/Wizard.class has changed.
Output file /home/tomas/projects/unnecessary-wizard/build/classes/main/de/tlongo/unneccesarywizard/java/core/ConstructorInjector.class has changed.
为什么groovy任务会改变java类

正如我所说的,我试图通过一个简单的展示来重现错误,groovy类也实现了一个java接口,w/o成功

这是我的
build.script
,它相当于朝九晚五,依我看:

apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'maven'

group = 'de.tlongo'
version = '0.3-SNAPSHOT'

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.3.5'
    compile 'commons-configuration:commons-configuration:1.7'
    compile 'ch.qos.logback:logback-classic:1.1.1'
    compile 'org.apache.commons:commons-lang3:3.3.2'
    compile 'org.reflections:reflections:0.9.9-RC1'

    testCompile 'org.hamcrest:hamcrest-all:1.3'
    testCompile group: 'junit', name: 'junit', version: '4.11'
    testCompile 'org.mockito:mockito-all:1.9.5'
}

知道出了什么问题吗?或者我不理解gradle如何编译此类项目的概念。

在gradle中编译Java和Groovy源代码时,通常应将所有源代码放在'src/main/Groovy'目录中,以允许交叉编译。它们可以是分开的(java中的java,groovy中的groovy);然而,如果存在跨语言依赖关系,您可能会遇到编译问题——这就是您似乎遇到的问题


另外,作为旁注,应用groovy插件时不需要应用java插件-groovy插件依赖于java插件,因此它已经可用。

这应该只在groovy类被移植到java之后发生。这是一个已知的限制,其原因是
GroovyCompile
JavaCompile
都删除了它们在上一次运行时生成的类文件,以防止过时的类文件。

我现在尝试让groovy编译器完成所有编译,并且它可以工作。这对我来说似乎很奇怪,因为(至少我认为是这样)我设计的所有东西都是以一种跨语言依赖关系仅为groovy->Java的方式。在我的例子中,我没有看到groovy类移植到Java的位置。移植什么时候发生?它的用例是什么?当你把一个Groovy类移植到Java时会发生这种情况。我没有把任何Groovy类移植到Java,是吗?例如,当我让groovy类实现java接口时,它是否被移植到java?我只是在移植了一个类之后遇到了这个问题。删除Peter的信息:删除项目中的
.gradle
目录就解决了这个问题(可能有点笨手笨脚,但效果很好)。