Eclipse 外掛與設定快取不相容。 |
Eclipse 外掛會產生Eclipse IDE使用的檔案,因此可以將專案匯入 Eclipse(檔案
- 匯入…
- 現有專案至工作區
)。
eclipse
外掛產生的內容取決於使用哪些其他外掛
外掛 | 說明 |
---|---|
無 |
產生最小的 |
將 Java 設定新增至 |
|
將 Groovy 設定新增至 |
|
將 Scala 支援新增至 |
|
將網頁應用程式支援新增至 |
|
將 ear 應用程式支援新增至 |
Eclipse 外掛程式皆可自訂,並提供標準化的掛勾集,用於新增和移除產生檔案中的內容。
用法
若要使用 Eclipse 或 Eclipse WTP 外掛程式,請在建置指令碼中包含下列其中一行程
plugins {
eclipse
}
plugins {
id 'eclipse'
}
plugins {
`eclipse-wtp`
}
plugins {
id 'eclipse-wtp'
}
注意:內部而言,eclipse-wtp
外掛程式也會套用 eclipse
外掛程式,因此您不必同時套用兩個外掛程式。
兩個 Eclipse 外掛程式都會在您的專案中新增許多工作。您將會使用到的主要工作為 eclipse
和 cleanEclipse
工作。
工作
Eclipse 外掛程式會將下列工作新增到專案中。
Eclipse 外掛程式工作
eclipse
— 工作-
相依於:所有 Eclipse 組態檔案產生工作
產生所有 Eclipse 組態檔案
cleanEclipse
— 刪除-
相依於:所有 Eclipse 組態檔案清除工作
移除所有 Eclipse 組態檔案
cleanEclipseProject
— 刪除-
移除
.project
檔案。 cleanEclipseClasspath
— 刪除-
移除
.classpath
檔案。 cleanEclipseJdt
— 刪除-
移除
.settings/org.eclipse.jdt.core.prefs
檔案。 eclipseProject
— 產生 Eclipse 專案-
產生
.project
檔案。 eclipseClasspath
— 產生 Eclipse 類別路徑-
產生
.classpath
檔案。 eclipseJdt
— 產生 Eclipse Jdt-
產生
.settings/org.eclipse.jdt.core.prefs
檔案。
Eclipse WTP 外掛程式 — 其他工作
cleanEclipseWtpComponent
— 刪除-
移除
.settings/org.eclipse.wst.common.component
檔案。 cleanEclipseWtpFacet
— 刪除-
移除
.settings/org.eclipse.wst.common.project.facet.core.xml
檔案。 eclipseWtpComponent
— 產生 Eclipse Wtp 元件-
產生
.settings/org.eclipse.wst.common.component
檔案。 eclipseWtpFacet
— GenerateEclipseWtpFacet-
產生
.settings/org.eclipse.wst.common.project.facet.core.xml
檔案。
設定
模型 | 參考名稱 | 說明 |
---|---|---|
|
頂層元素,可讓您以 DSL 友善的方式設定 Eclipse 外掛。 |
|
|
可設定專案資訊 |
|
|
可設定類別路徑資訊。 |
|
|
可設定 jdt 資訊(來源/目標 Java 相容性)。 |
|
|
只有套用 |
|
|
只有套用 |
自訂產生檔案
Eclipse 外掛可讓您自訂產生的元資料檔案。外掛提供一個 DSL,用於設定建模專案的 Eclipse 檢視的模型物件。這些模型物件會與現有的 Eclipse XML 元資料合併,最後產生新的元資料。模型物件提供較低層級的掛鉤,用於在與模型設定合併前後處理代表檔案內容的網域物件。它們也提供一個非常低層級的掛鉤,用於在儲存之前直接處理原始 XML 以進行調整,以進行 Eclipse 和 Eclipse WTP 外掛未建模的微調和設定。
合併
現有 Eclipse 檔案中也是產生內容目標的部分,會根據特定部分進行修改或覆寫。其餘部分會保持原樣。
停用合併並完全改寫
若要完全改寫現有的 Eclipse 檔案,請執行清除工作,並搭配對應的產生工作,例如「gradle cleanEclipse eclipse
」(依此順序)。如果您想將此設定為預設行為,請將「tasks.eclipse.dependsOn(cleanEclipse)
」新增至您的建置指令碼。這樣就不需要明確執行清除工作。
此策略也可套用於外掛程式會產生的個別檔案。例如,這可以用於「.classpath
」檔案,執行「gradle cleanEclipseClasspath eclipseClasspath
」。
連結至產生生命週期
Eclipse 外掛程式提供建模物件,用於建構由 Gradle 產生的 Eclipse 檔案區段。產生生命週期如下
-
讀取檔案;或如果檔案不存在,則使用 Gradle 提供的預設版本
-
beforeMerged
連結會執行,並附上代表現有檔案的網域名稱物件 -
現有內容會與從 Gradle 建置推論出的組態合併,或在 eclipse DSL 中明確定義
-
whenMerged
連結會執行,並附上代表要保留的檔案內容的網域名稱物件 -
withXml
連結會執行,並附上將要保留的 XML 原始表示 -
保留最終的 XML
進階組態連結
以下清單涵蓋用於每個 Eclipse 模型類型的網域名稱物件
- EclipseProject
-
-
beforeMerged { Project arg -> … }
-
whenMerged { Project arg -> … }
-
withXml { XmlProvider arg -> … }
-
- EclipseClasspath
-
-
beforeMerged { Classpath arg -> … }
-
whenMerged { Classpath arg -> … }
-
withXml { XmlProvider arg -> … }
-
- EclipseWtpComponent
-
-
beforeMerged { WtpComponent arg -> … }
-
whenMerged { WtpComponent arg -> … }
-
withXml { XmlProvider arg -> … }
-
- EclipseWtpFacet
-
-
beforeMerged { WtpFacet arg -> … }
-
whenMerged { WtpFacet arg -> … }
-
withXml { XmlProvider arg -> … }
-
- EclipseJdt
-
-
beforeMerged { Jdt arg -> … }
-
whenMerged { Jdt arg -> … }
-
withProperties { arg -> }
參數類型 ⇒java.util.Properties
-
部分覆寫現有內容
完整覆寫會導致所有現有內容被捨棄,因此會遺失在 IDE 中直接進行的任何變更。或者,beforeMerged
掛鉤可以覆寫現有內容的特定部分。下列範例會從 Classpath
領域物件移除所有現有相依性
import org.gradle.plugins.ide.eclipse.model.Classpath
eclipse.classpath.file {
beforeMerged(Action<Classpath> {
entries.removeAll { entry -> entry.kind == "lib" || entry.kind == "var" }
})
}
eclipse.classpath.file {
beforeMerged { classpath ->
classpath.entries.removeAll { entry -> entry.kind == 'lib' || entry.kind == 'var' }
}
}
產生的 .classpath
檔案只會包含 Gradle 產生的相依性項目,但不會包含原始檔案中可能存在的任何其他相依性項目。(在相依性項目的情況下,這也是預設行為。).classpath
檔案的其他區段會保持原樣或合併。.project
檔案中的性質也可以執行相同的動作
import org.gradle.plugins.ide.eclipse.model.Project
eclipse.project.file.beforeMerged(Action<Project> {
natures.clear()
})
eclipse.project.file.beforeMerged { project ->
project.natures.clear()
}
修改已完整填入的領域物件
whenMerged
掛鉤允許操作已完整填入的領域物件。這通常是自訂 Eclipse 檔案的首選方式。以下是匯出 Eclipse 專案所有相依性的方法
import org.gradle.plugins.ide.eclipse.model.AbstractClasspathEntry
import org.gradle.plugins.ide.eclipse.model.Classpath
eclipse.classpath.file {
whenMerged(Action<Classpath> { ->
entries.filter { entry -> entry.kind == "lib" }
.forEach { (it as AbstractClasspathEntry).isExported = false }
})
}
eclipse.classpath.file {
whenMerged { classpath ->
classpath.entries.findAll { entry -> entry.kind == 'lib' }*.exported = false
}
}
修改 XML 表示
withXml
鉤子允許在檔案寫入磁碟之前操作記憶體中的 XML 表示方式。儘管 Groovy 的 XML 支援和 Kotlin 的擴充函式彌補了很多,但這種方法不如操作網域物件方便。作為回報,您可以完全控制產生的檔案,包括網域物件未建模的部分。
import org.w3c.dom.Element
eclipse.wtp.facet.file.withXml(Action<XmlProvider> {
fun Element.firstElement(predicate: Element.() -> Boolean) =
childNodes
.run { (0 until length).map(::item) }
.filterIsInstance<Element>()
.first { it.predicate() }
asElement()
.firstElement { tagName === "fixed" && getAttribute("facet") == "jst.java" }
.setAttribute("facet", "jst2.java")
})
eclipse.wtp.facet.file.withXml { provider ->
provider.asNode().fixed.find { it.@facet == 'jst.java' }.@facet = 'jst2.java'
}
測試類別路徑條目的區分
Eclipse 每個專案只定義一個類別路徑,這表示對 Gradle 專案如何對應的限制。Eclipse 4.8 引入了 測試來源 的概念。此功能允許 Eclipse 外掛在測試和非測試來源之間定義更好的區分。
Eclipse 類別路徑包含類別路徑條目:來源目錄、jar 檔案、專案相依性等。每個類別路徑條目可以有一個類別路徑屬性清單,其中屬性為字串金鑰值配對。與測試來源相關的兩個類別路徑屬性:test
和 without_test_code
,兩者都可以有 true
或 false
作為值。
如果來源目錄具有 test=true
類別路徑屬性,則內容會被視為測試來源。測試來源可以存取非測試來源,但非測試來源無法存取測試來源。類似地,測試來源只能參考 jar 檔案中的類別,如果 jar 檔案具有 test=true
類別路徑屬性。對於專案相依性,如果存在 test=true
屬性,則目標專案中的類別對測試來源可見。如果存在 without_test_code=false
屬性,則目標專案的測試來源也可存取。預設情況下,測試程式碼不可用(可以視為隱含具有 without_test_code=true
)。
產生 Eclipse 類別路徑時,測試屬性宣告套用下列規則
-
如果來源組和相依性設定的名稱包含「test」子字串,不分大小寫,則會分類為測試。
-
JVM 測試套件外掛定義的所有來源組和相依性設定都分類為測試。
-
如果容器來源組是測試來源組,則來源目錄具有
test=true
類別路徑屬性。 -
如果 jar 檔案和專案相依性只存在於測試相依性設定中,則具有
test=true
屬性。 -
如果目標專案套用 java-test-fixtures 外掛程式,專案相依性會具有
without_test_sources=false
屬性。
您可以自訂測試原始碼組和設定
eclipse {
classpath {
testSourceSets = testSourceSets.get() + setOf(integTest)
testConfigurations = testConfigurations.get() + setOf(functional)
}
}
eclipse {
classpath {
testSourceSets = testSourceSets.get() + [sourceSets.integTest]
testConfigurations = testConfigurations.get() + [configurations.functional]
}
}
考慮在這種情況下,從手動定義其他測試原始碼組移轉到使用 JVM 測試套件外掛程式。 |
您也可以自訂專案是否應透過 containsTestFixtures
屬性將測試原始碼公開給上游專案相依性。
eclipse {
classpath {
containsTestFixtures = true
}
}
eclipse {
classpath {
containsTestFixtures = true
}
}
請注意,此設定也套用於 Buildship 專案的類別路徑。