如何解决Gradle`java-platform`插件:如何设置依赖项动态版本解析?
我正在尝试使用Gradle的java-platform
插件制作BOM(物料清单POM),并希望将Gradle的锁定功能与该插件一起使用:我想使版本始终保持最新。
这是我的build.gradle
文件的一部分。
plugins {
id "java-platform"
id "maven-publish"
}
javaPlatform {
allowDependencies()
}
dependencyLocking {
lockAllConfigurations()
lockMode = LockMode.STRICT
}
... skipped ...
dependencies {
constraints {
api("com.graphql-java:graphql-java:${library_graphql_version}")
api("com.graphql-java:java-dataloader:${library_graphqlDataloader_version}")
// Redisson
api("org.redisson:redisson-hibernate-53:${library_redisson_version}")
api("org.redisson:redisson-spring-boot-starter:${library_redisson_version}")
api("org.redisson:redisson-spring-data-23:${library_redisson_version}")
}
}
publications {
some(MavenPublication) {
from components.javaPlatform
afterEvaluate {
pom {
name = 'BOM'
description = 'Bill of Materials (BOM)'
}
}
}
}
... skipped ...
gradle.properties
文件
library_graphql_version=14.+
library_graphqlDataloader_version=2.+
library_redisson_version=3.+
当我执行generatePomFileForSomePublication
任务时,它将转换为以下POM片段:
... skipped ...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
<version>14.+</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>java-dataloader</artifactId>
<version>2.+</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-hibernate-53</artifactId>
<version>3.+</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.+</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-23</artifactId>
<version>3.+</version>
</dependency>
</dependencies>
</dependencyManagement>
... skipped ...
很明显,有plus
个符号不应该出现在结果POM中。这意味着,依赖性解析不适用于java-platform
约束。
所以问题是如何使这些constraints
的依赖关系解决方案起作用?
解决方法
使用java-platform
插件找到了一种无解决方法。
apply plugin: 'java'
apply plugin: 'maven-publish'
repositories {
mavenCentral()
jcenter()
google()
gradlePluginPortal()
}
dependencyLocking {
lockAllConfigurations()
lockMode = LockMode.STRICT
}
configurations {
all {
resolutionStrategy.activateDependencyLocking()
resolutionStrategy.cacheChangingModulesFor 0,"minutes"
}
}
dependencies {
compile("com.graphql-java:graphql-java:${library_graphql_version}")
compile("com.graphql-java:java-dataloader:${library_graphqlDataloader_version}")
compile("org.redisson:redisson-hibernate-53:${library_redisson_version}")
compile("org.redisson:redisson-spring-boot-starter:${library_redisson_version}")
compile("org.redisson:redisson-spring-data-23:${library_redisson_version}")
}
jar {
enabled = false
}
publishing {
publications {
some(MavenPublication) {
afterEvaluate {
pom {
name = 'BOM'
description = 'Bill of Materials (BOM)'
packaging = 'pom'
withXml {
Node pomNode = asNode() as Node
pomNode.dependencyManagement.dependencies.each { dependencies ->
pomNode.dependencies.dependency.each { node ->
dependencies.append(node)
}
}
pomNode.properties.each { properties ->
pomNode.dependencyManagement.dependencies.dependency.each { dependency ->
def groupId = dependency.groupId[0].value().first()
def artifactId = dependency.artifactId[0].value().first()
def version = dependency.version[0].value().first()
def propertyName = "${groupId}.${artifactId}.version"
properties.append(new Node(null,propertyName,null,version))
dependency.version[0].setValue("\${${propertyName}}")
}
}
pomNode.remove(pomNode.dependencies)
}
}
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。