我想在没有互联网连接的机器上构建一个带有几个 gradle 插件的项目。我有一个私有 Maven 存储库,其中包含该项目的所有依赖项,除了 gradle 插件的 .pom 文件。我如何从 plugins.gradle.org 获取它并发布到我的私人存储库?
此代码使用 Kotlin DSL,定义了一个任务
getThePoms
,该任务从添加到配置 pomConfiguration
1 并托管在 Gradle 插件门户的工件中获取 POM,并将它们复制到 build/poms
。
请注意,您需要在
dependencies
块中指定工件坐标,而不是 Gradle 插件 ID,它们是单独查找机制的一部分。
val pomConfigurationName = "pomConfiguration"
repositories {
gradlePluginPortal()
}
val pomConfiguration = configurations.register(pomConfigurationName) {
isTransitive = false // We only want the declared dependencies
}
dependencies {
pomConfigurationName("org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.0")
pomConfigurationName("org.jetbrains.kotlin:kotlin-serialization:2.0.0")
}
tasks.register<Copy>("getThePoms") {
val componentIds = pomConfiguration.get().resolvedConfiguration.resolvedArtifacts.map { it.id.componentIdentifier }
val artifactQueryResult = dependencies.createArtifactResolutionQuery()
.forComponents(componentIds)
.withArtifacts(MavenModule::class.java, MavenPomArtifact::class.java)
.execute()
val pomFiles = artifactQueryResult.resolvedComponents
.flatMap { component -> component.getArtifacts(MavenPomArtifact::class) }
.map { result -> (result as ResolvedArtifactResult).file }
from(pomFiles)
into(layout.buildDirectory.dir("poms"))
}
1 这里以 Kotlin Gradle 插件和 Kotlin 序列化插件为例。