![](/img/trans.png)
[英]Is there an equivalent `mvn dependency:build-classpath` for gradle projects?
[英]How to put custom Gradle plugins on an another projects build classpath?
我有一個已發布的 gradle 插件,看起來像這樣:
|__root
| |
| |
| |__java
| | |__SomeJavaClass.java
| | |__SomeJavaClass2.java
| |
| |__kotlin
| |__MyPluginClass.kts
| |__MyTaskClass.kts
| |__Utils.kts
我想將此插件作為一個項目包含在我的多項目構建中,而不是將其發布到存儲庫以便於開發。
這個插件有 3 個項目 A 正在使用的 Kotlin 文件。 MyPluginClass.kts 有我自己的插件類,MyTaskClass.kts 有我自己的任務類,Utils.kts 只包含 kotlin 函數。 java 類用於 MyPlugin 和 MyTask。
它被放在項目 A 的 build.gradle.kts 類路徑中
classpath("com.my:custom.plugin:version")
我想實現的一個非常簡化的項目結構:
root
|
|__Project A
| |
| |__build.gradle.kts
| |__x.gradle.kts
| |__y.gradle.kts
| |__settings.gradle
|
|__Project build-logic
| |
| |__build.gradle.kts
| |
| |__java
| | |__SomeJavaClass.java
| | |__SomeJavaClass2.java
| |
| |__kotlin
| |__MyPluginClass.gradle.kts
| |__MyTaskClass.gradle.kts
| |__Utils.gradle.kts
我正在嘗試從這些 kotlin 文件創建插件並將它們包含在我的主構建中,因為我需要對它們進行預編譯,但是當 build.gradle 在那里運行時,我似乎無法找到將它們放在項目 A 的類路徑中的方法。 甚至可能嗎? 什么是正確的解決方案?
我正在使用 gradle 7.3
您可以使用復合構建組合多個獨立的 Gradle 項目。 Gradle 插件也是如此。
測試 Gradle 插件部分記錄了包含來自另一個目錄的 Gradle 插件。
因此,如果您有一個shared-build-logic
項目,該項目提供了一個 ID my.shared-build-logic
的 Gradle 插件,並且您想在project-a
中使用它。
my-projects/
├── shared-build-logic/
│ ├── src/
│ │ └── ...
│ ├── build.gradle.kts
│ └── settings.gradle.kts
└── project-a/
├── src/
│ └── ...
├── build.gradle.kts
└── settings.gradle.kts
然后你需要在你的project-a
中包含shared-build-logic
——一個 Gradle 設置文件。
// my-projects/project-a/settings.gradle.kts
rootProject.name = "project-a"
pluginManagement {
includeBuild("../shared-build-logic")
}
現在,只要shared-build-logic
正確地提供了 Gradle 插件,您就可以在project-a
中引用該插件。
// my-projects/project-a/settings.gradle.kts
plugins {
id("my.shared-build-logic")
}
芬納利想通了。 我沒有從構建邏輯創建插件,而是將它們保留為 kotlin 文件。 由於它是一個單獨的 gradle 項目,我可以構建項目並將項目 A 的類路徑指向生成的 jar 文件,例如
buildscript {
dependencies {
classpath(files("path.to.the.jar"))
}
}
這樣我可以從項目 A 訪問方法和 MyTask。
另一個問題是我想像應用 MyPlugin
plugins{
id("my-plugin-name")
}
這不起作用,我猜是因為它是一門課。 但是現在由於我的構建類路徑中有整個項目 jar,我可以這樣做:
apply<my-plugin-name>()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.