我打算包含的專案是 splain 的最新版本:
https://github.com/tek/splain
它是用 gradle 構建的,并且具有以下額外的任務定義(在 gradle kts 中):
// invoke
task("dependencyTree") {
dependsOn("dependencies")
}
如果我包含它(在另一個 gradle 專案中):
include("splain")
我會遇到2個問題:
splain 使用的任何僅在根專案中作業的構建插件(例如“io.github.gradle-nexus.publish-plugin”)都會拋出錯誤,因為在這種情況下顯然 splain 不再是根專案(它不是一個子模塊,所以不確定它是如何分類的)
如果新專案還定義了任務“dependencyTree”,則會導致命名沖突:
org.gradle.api.internal.tasks.DefaultTaskContainer$DuplicateTaskException: Cannot add task 'dependencyTree' as a task with that name already exists.
at org.gradle.api.internal.tasks.DefaultTaskContainer.failOnDuplicateTask(DefaultTaskContainer.java:257)
at org.gradle.api.internal.tasks.DefaultTaskContainer.addTask(DefaultTaskContainer.java:250)
at org.gradle.api.internal.tasks.DefaultTaskContainer.access$400(DefaultTaskContainer.java:76)
at org.gradle.api.internal.tasks.DefaultTaskContainer$2.call(DefaultTaskContainer.java:298)
at org.gradle.api.internal.tasks.DefaultTaskContainer$2.call(DefaultTaskContainer.java:292)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
at org.gradle.api.internal.tasks.DefaultTaskContainer.doCreate(DefaultTaskContainer.java:292)
at org.gradle.api.internal.tasks.DefaultTaskContainer.create(DefaultTaskContainer.java:334)
at org.gradle.api.internal.tasks.DefaultTaskContainer.create(DefaultTaskContainer.java:75)
at org.gradle.api.internal.project.DefaultProject.task(DefaultProject.java:1270)
顯然,每次運行的 gradle 任務名稱都必須是唯一的,沒有為名稱設計范圍或命名空間。
我需要 gradle 能夠將任何其他可以自行成功編譯的 gradle 專案宣告為“包含”,而不是添加許多以前沒人擔心的額外約束。可能嗎?如果沒有,可以采取什么措施來緩解上述兩個問題?
uj5u.com熱心網友回復:
您可以使用復合構建來包含完全獨立的 Gradle 構建。
// settings.gradle.kts
rootProject.name = "my-project"
includeBuild("../tek-splain")
您可以使用包含的構建來替換依賴項。
// settings.gradle.kts
rootProject.name = "my-project"
includeBuild("../anonymous-library") {
dependencySubstitution {
substitute(module("org.sample:number-utils")).using(project(":"))
}
}
完整的檔案在這里: https ://docs.gradle.org/7.4.2/userguide/composite_builds.html#settings_defined_composite
源依賴
您還可以宣告對公共 Git 存盤庫的依賴關系。Gradle 將自動簽出遠程倉庫,因此您不必管理它。
請注意,它是實驗性的,可能不穩定!
https://blog.gradle.org/introducing-source-dependencies
// settings.gradle
sourceControl {
gitRepository("https://github.com/gradle/native-samples-cpp-library.git") {
producesModule("org.gradle.cpp-samples:utilities")
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/490142.html
