簡體   English   中英

Gradle Groovy插件似乎刪除了已編譯的Java類

[英]Gradle Groovy Plugin Seems to Remove Compiled Java Classes

當嘗試編譯使用groovy作為腳本語言的項目時,這是一個很奇怪的效果。 設置非常簡單:

我有一個可以通過Groovy腳本配置的Java應用程序。 配置文件的解析全部由groovy代碼處理,並生成幾個類,這些類包含從腳本中提取的信息,並且這些類對於Java應用程序可用。

配置類都實現了接口,以分離groovy方面,以便Java應用程序不知道它實際上與groovy對象對話。

因此,有了這些接口,我這里唯一的依賴就是從groovy到Java。 這應該是正常的情況下,由於Groovy插件執行compileJavacompileGroovy默認。

這一直到今天!!!

幾個小時前,事情開始變得奇怪。 嘗試使用gradle test測試我的應用程序會導致錯誤,告訴我groovy類看不到Java接口。 我嘗試過用compileJava分別編譯Java和groovy,然后再編譯compileGroovy並注意到后者只是刪除了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類?

正如我所說,我試圖通過一個簡單的展示來重現錯誤,其中一個時髦的類也實現了Java接口,但沒有成功。

這是我的build.script ,它是imo的9比5:

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之后,才應該發生這種情況。 這是一個已知的限制,是由於GroovyCompileJavaCompile刪除了它們在上一次運行時生成的類文件,以防止過時的類文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM