[英]gradle doesn't resolve placeholder from parent properties in dependency version that is inside library that I specified in build.gradle
我有一個關於通過 gradle 解決依賴版本的有趣問題。 這是我的情況。 我將我的庫部署到了 nexus。 在這個過程中,我使用了 flatten-maven-plugin 和 resolveCiFriendliesOnly flattenMode。 結果我在nexus中有父pom文件和子pom文件。
來自源的父 pom 文件:
<groupId>ru.example</groupId>
<artifactId>example-parent</artifactId>
<version>${revision}${changelist}</version>
<packaging>pom</packaging>
<properties>
<revision>0.0.1</revision>
<changelist>-SNAPSHOT</changelist>
<version.base>${revision}${changelist}</version.base>
<example-child.version>${version.base}</example-child.version>
<example-child-dependency.version>${version.base}</example-child-dependency.version>
</properties>
來自源的子 pom 文件
<parent>
<groupId>ru.example</groupId>
<artifactId>example-parent</artifactId>
<version>${revision}${changelist}</version>
<relativePath>..</relativePath>
</parent>
<artifactId>example-child</artifactId>
<version>${example-child.version}</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>ru.example</groupId>
<artifactId>example-child-dependency</artifactId>
<version>${example-child-dependency.version}</version>
</dependency>
</dependencies>
來自nexus的父pom文件
<groupId>ru.example</groupId>
<artifactId>example-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<version.base>0.0.1-SNAPSHOT</version.base>
<revision>0.0.1</revision>
<changelist>-SNAPSHOT</changelist>
<example-child.version>${version.base}</example-child.version>
<example-child-dependency.version>${version.base}</example-child-dependency.version>
<properties>
來自nexus的子pom文件
<parent>
<groupId>ru.example</groupId>
<artifactId>example-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<groupId>ru.example</groupId>
<artifactId>example-child</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>ru.example</groupId>
<artifactId>example-child-dependency</artifactId>
<version>${example-child-dependency.version}</version>
</dependency>
</dependencies>
之后,我嘗試使用 gradle 構建 java 應用程序。 在此應用程序的 build.gradle 文件中,我有這樣的行:
dependencies {
implementation("ru.example:example-child:0.0.1-SNAPSHOT")
}
並且構建失敗並出現錯誤:
> Task :java_application:compileJava
Resolving global dependency management for project 'java_application'
Errors occurred while build effective model from /u01/jenkins_slave/.gradle/caches/modules-
2/files-2.1/ru.example/example-child/0.0.1-
SNAPSHOT/809129e53f76bfb7b6a141e9aeb8ffb1a692e76c/example-child-0.0.1-SNAPSHOT.pom:
'dependencies.dependency.version' for ru.example:example-child-dependency:jar must be a
valid version but is '${example-child-dependency.version}'. in ru.example:example-
child:0.0.1-SNAPSHOT
為什么 gradle 不能解析子項目依賴的占位符?
gradle
似乎沒有評估${example-child-dependency.version}
並且您可能必須使用mvn
構建才能為 gradle 生成消耗品/靜態*.pom
gradle
。 我的意思是,很可能mvn
會評估*.pom
,而gradle
不會。
那可能是:
<artifactId>example-child-dependency</artifactId>
<version>${version.base}</version>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.