build.gradle具有以下依赖项-
dependencies {
compile("com.rhuldip.artifactId:com.rhuldip.mainDependency:1.0.0-SNAPSHOT")
}
字符串
在我的maven存储库中,我在REPO_URL/com/rhuldip/artifactId/com.rhuldip. mainDeputy/1.0.0-SNAPSHOT位置上有以下文件
- maven-metadata.XML
- com.rhuldip.mainDependency-1.0.0.pom
- com.rhuldip.mainDependency-1.0.0.jar
文件 com.rhuldip.mainDependency-1.0.0.pom 包含传递依赖和一个变量,如下所示-
<properties>
<myapp.version>${revision}</myapp.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.rhuldip.myapp</groupId>
<artifactId>transitiveDependeny</artifactId>
<version>${myapp.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
型
但我得到了这个错误-
***
01:08:40 > Could not resolve com.rhuldip.artifactId:com.rhuldip.mainDependency:1.0.0-SNAPSHOT.
01:08:40 > Could not parse POM REPO-URL/com/rhuldip/artifactId/com.rhuldip.mainDependency/1.0.0-SNAPSHOT/com.rhuldip.mainDependency-1.0.0-SNAPSHOT.pom
01:08:40 > Could not find com.rhuldip.myapp:transitiveDependeny:${revision}.
型
我使用的是gradle 4.10.2 版本。我尝试发送这样的修订变量,但仍然得到相同的错误
ext {
revision: '1.1.0-SNAPSHOT'
}
型
1条答案
按热度按时间mhd8tkvw1#
我想你有:
字符串
您需要在Gradle构建脚本中显式定义
revision
属性,以便在获取传递依赖项时可以正确解析该属性。但是:Gradle 4.10.2(2018!)不会自动将
ext
块中定义的属性传递给Maven POM解析器。您可以尝试在构建脚本的顶层定义此属性。用resolution strategy替换传递依赖版本中的变量可能会有帮助.
在
build.gradle
文件中使用ResolutionStrategy
动态替换传递依赖项的版本。实现将动态版本(
${revision}
)替换为transitiveDependeny
的特定版本的策略。您的
build.gradle
文件将是:型
您的
build.gradle
中的配置会告诉Gradle将transitiveDependeny
版本中的${revision}
占位符替换为特定版本的1.1.0-SNAPSHOT
。作为替代解决方法,您可以在
build.gradle
文件中使用正确的版本显式声明传递依赖关系。这样,Gradle将不依赖POM文件来解析版本。并修改您的build.gradle
以包含特定版本的传递依赖关系。型
这种方法基本上绕过了这个问题,因为它不依赖于Maven POM文件来解析
transitiveDependeny
的动态版本。相反,您直接在Gradle项目中指定依赖项及其版本。仍然得到同样的错误。
此外,依赖项位于远程maven存储库中,
com.rhuldip.artifactId:com.rhuldip.mainDependency
具有artifactId
com.rhuldip.myapp
的可传递依赖项,名称为transitiveDependency
。依赖项在
com.rhuldip.artifactId:com.rhuldip.mainDependency-1.0.0.pom
中声明,但传递依赖项的实际位置在REO_URL/com/rhuldip/myapp
。因此,传递依赖托管在 * 远程 * Maven存储库中。这意味着Gradle项目中的存储库配置必须正确指向此远程存储库。
问题是传递依赖的版本被指定为
com.rhuldip.artifactId:com.rhuldip.mainDependency
的POM文件中的变量(${revision}
)。确保您的
build.gradle
包含com.rhuldip.myapp
所在的远程Maven存储库:型
由于替换
${revision}
占位符的解析策略无法按预期工作,请尝试使用固定版本显式声明传递依赖关系,如前所述。这是一种更直接的方法,有时可以绕过POM文件中的可变解析问题。在
gradle.properties
文件中定义revision
变量,这在某些设置中可能更有效。你的
build.gradle
是:型
gradle.properties
文件:型
但要确保
com.rhuldip.myapp:transitiveDependency
的1.1.0-SNAPSHOT
版本在远程仓库中确实可用。如果不是,请将其替换为正确的可用版本。