簡體   English   中英

Eclipse的Gradle集成不斷更改.classpath文件

[英]Gradle integration for eclipse keeps on changing .classpath file

我當前的配置包括一個使用gradle以及Java和eclipse-wtp插件的Java WAR項目,以及針對Eclipse集成的最新版本Buildship(到今天上午為1.0.3,現在為1.0.4)以及Eclipse Luna。

在遵循此解決方案https://stackoverflow.com/a/9820317/1544713 (成功)以避免將測試類部署到本地服務器后,我注意到每次刷新項目或關閉並打開Eclipse時,都會生成.classpath文件和.settings/org.eclipse.wst.common.component更改為它們以前的狀態,這是我給我帶來的問題(將測試類部署到本地服務器意味着由於缺少這些類而無法加載它們一些測試時間的依賴性,當然還有不良行為)。

.classpath的內容從(右)更改為:

<classpathentry kind="src" output="target/test-classes" path="src/test/java">
    <attributes>
        <attribute name="FROM_GRADLE_MODEL" value="true"/>
    </attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/resources">
    <attributes>
        <attribute name="FROM_GRADLE_MODEL" value="true"/>
    </attributes>
</classpathentry>

到這種不希望的狀態:

<classpathentry kind="src" path="src/test/java">
    <attributes>
        <attribute name="FROM_GRADLE_MODEL" value="true"/>
    </attributes>
</classpathentry>
<classpathentry kind="src" path="src/test/resources">
    <attributes>
        <attribute name="FROM_GRADLE_MODEL" value="true"/>
    </attributes>
</classpathentry>

.settings/org.eclipse.wst.common.component的情況下,添加了以下兩行(再次,我不希望它們出現):

    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java"/>
    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/resources"/>

我不知道是Gradle更改了文件還是Buildship,甚至是Eclipse。 無論如何,我想有一種方法可以阻止這種情況的發生。 我嘗試了許多替代方法,例如build.gradle中的以下配置:

eclipse.classpath.file.whenMerged { cp ->
    cp.entries.findAll { it.kind = "src" && it.path.startsWith("src/test/") }*.output = "target/test-classes"
}

eclipse {
    wtp.component {  
        file.withXml { xml ->       
            def node = xml.asNode()                     
            def wbrNodes = node.'**'.findAll { it.name() == 'wb-resource' && it.'@source-path'.startsWith("/src/test/")}
            if (wbrNodes.size() > 0) {
                wbrNodes.each { n -> n.parent().remove(n) }
            }                   
        }
    }
}

但是,此配置不正常地工作(有時似乎可以工作,有時不起作用,實際上,以eclipse.classpath.file.whenMerged開頭的第一段代碼永遠無法工作)。

提前致謝。

在花了一些時間尋找可能的解決方案以及問題的原因之后,我發現真正的問題實際上是Buildship,它沒有注意build.gradle中eclipse-wtp插件的指令,相反,它采用了自己的方法來生成.classpath和相關的eclipse配置文件。 同時,到目前為止(今天才發布的Buildship 1.0.5)在構建自己的模型時(在導入Gradle項目,打開Eclipse或刷新項目時,例如),都無法配置或操作Buildship。 F5)。 正如Lance_Java在Gradle論壇( https://discuss.gradle.org/t/gradle-integration-for-eclipse-keeps-on-changing-classpath-file/11813/7?u=fbudassi )中所說的那樣eclipse-wtp插件和Buildship一起使用,因為兩者都采用各自的方法來生成Eclipse配置文件。

因此,到目前為止的解決方案是從我的Eclipse安裝中刪除Buildship,而是直接從Eclipse市場上使用Gradle IDE Pack 3.6.x + 0.17插件替換它,該插件使用build.gradle指令構建自己的模型,從而避免了這樣任何可能的沖突。

如果Buildship的任何人都可以閱讀這篇文章,請給我們一些有關文件生成的提示。 再次,正如Lance_Java所建議的那樣,這樣的事情確實有幫助:

apply plugin: 'buildship' 

buildship.wtp.component.file.withXml { ... }

暫無
暫無

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

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