maven 当可传递依赖项将版本作为变量时,Gradle无法找到可传递依赖项

qmelpv7a  于 11个月前  发布在  Maven
关注(0)|答案(1)|浏览(150)

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位置上有以下文件

  1. maven-metadata.XML
  2. com.rhuldip.mainDependency-1.0.0.pom
  3. 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'
}

mhd8tkvw

mhd8tkvw1#

我想你有:

Gradle Project
│
└── build.gradle
    └── dependencies
        └── com.rhuldip.artifactId:com.rhuldip.mainDependency:1.0.0-SNAPSHOT
            └── Maven Repository
                ├── com.rhuldip.mainDependency-1.0.0.pom
                │   └── transitiveDependeny with ${revision} as version
                └── com.rhuldip.mainDependency-1.0.0.jar

字符串
您需要在Gradle构建脚本中显式定义revision属性,以便在获取传递依赖项时可以正确解析该属性。
但是:Gradle 4.10.2(2018!)不会自动将ext块中定义的属性传递给Maven POM解析器。您可以尝试在构建脚本的顶层定义此属性。
resolution strategy替换传递依赖版本中的变量可能会有帮助.
build.gradle文件中使用ResolutionStrategy动态替换传递依赖项的版本。
实现将动态版本(${revision})替换为transitiveDependeny的特定版本的策略。
您的build.gradle文件将是:

ext {
    myappVersion = '1.1.0-SNAPSHOT' // Define the specific version you want to use
}

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        if (details.requested.group == 'com.rhuldip.myapp' && details.requested.name == 'transitiveDependeny') {
            if (details.requested.version == '${revision}') {
                details.useVersion myappVersion
            }
        }
    }
}

dependencies {
    compile("com.rhuldip.artifactId:com.rhuldip.mainDependency:1.0.0-SNAPSHOT")
}


您的build.gradle中的配置会告诉Gradle将transitiveDependeny版本中的${revision}占位符替换为特定版本的1.1.0-SNAPSHOT
作为替代解决方法,您可以在build.gradle文件中使用正确的版本显式声明传递依赖关系。这样,Gradle将不依赖POM文件来解析版本。并修改您的build.gradle以包含特定版本的传递依赖关系。

dependencies {
    compile("com.rhuldip.artifactId:com.rhuldip.mainDependency:1.0.0-SNAPSHOT")
    // Explicitly specify the version for the transitive dependency
    compile("com.rhuldip.myapp:transitiveDependeny:1.1.0-SNAPSHOT")
}


这种方法基本上绕过了这个问题,因为它不依赖于Maven POM文件来解析transitiveDependeny的动态版本。相反,您直接在Gradle项目中指定依赖项及其版本。
仍然得到同样的错误。
此外,依赖项位于远程maven存储库中,com.rhuldip.artifactId:com.rhuldip.mainDependency具有artifactIdcom.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存储库:

repositories {
    maven {
        url 'REPO_URL' // Replace with the actual URL of your remote Maven repository
    }
    // Include other necessary repositories, like mavenCentral, if needed
}


由于替换${revision}占位符的解析策略无法按预期工作,请尝试使用固定版本显式声明传递依赖关系,如前所述。这是一种更直接的方法,有时可以绕过POM文件中的可变解析问题。
gradle.properties文件中定义revision变量,这在某些设置中可能更有效。
你的build.gradle是:

dependencies {
    compile("com.rhuldip.artifactId:com.rhuldip.mainDependency:1.0.0-SNAPSHOT")
    // Explicitly define the transitive dependency
    compile("com.rhuldip.myapp:transitiveDependency:1.1.0-SNAPSHOT")
}


gradle.properties文件:

revision=1.1.0-SNAPSHOT


但要确保com.rhuldip.myapp:transitiveDependency1.1.0-SNAPSHOT版本在远程仓库中确实可用。如果不是,请将其替换为正确的可用版本。

相关问题