java - Gradle Groovy 插件似乎删除了已编译的 Java 类

标签 java groovy gradle

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

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

配置类都实现接口(interface),以解耦 groovy 方面,以便 java 应用程序不知道它实际上与 groovy 对象通信。

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

这一直有效到今天!!!

几个小时前,事情开始变得奇怪。尝试使用 gradle test 测试我的应用程序会导致错误,告诉我 groovy 类看不到 java 接口(interface)。我尝试使用 compileJavacompileGroovy 分别编译 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 接口(interface),但没有成功。

这是我的 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 in java,groovy in groovy);但是,如果存在跨语言依赖项,您可能会遇到编译问题 - 这就是您遇到的情况。

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

关于java - Gradle Groovy 插件似乎删除了已编译的 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25435090/

相关文章:

Java 与服务器的有限连接

java - 将图像添加到用户单击布局的位置

java - Docker 客户端 Java API : The server failed to respond with a valid HTTP response

java - 从 Java 应用程序使用 Groovy 库

android - 类重复在 Android 仪器测试中添加 Robolectric

java - 使用throttleLast的组合Flowables无缘无故地被卡住

grails - Groovy/Grails多对多删除关系

java - 如何生成具有嵌套依赖项的 AAR

android - 给定的 Artifact 包含一个字符串文字,其包引用为 'android.support.v4',无法安全地重写

android - 无法编译设置 gradle React Native