尝试将我们的一些脚本升级到我们正在使用的插件的Gradle 4.0.1时失败了,我想到了先修复该插件。该插件是第三方开源项目。
所以我克隆了项目并尝试编译它。但它失败并显示以下消息:
c:\source\gradle-xld-plugin>gradlew build
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\source\gradle-xld-plugin\build.gradle' line: 2
* What went wrong:
Plugin [id: 'com.gradle.plugin-publish', version: '0.9.7'] was not found in
any of the following sources:
- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- maven(https://artifactory/java-v) (Could not resolve plugin artifact 'com.gradle.plugin-publish:com.gradle.plugin-publish.gradle.plugin:0.9.7')
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --
debug option to get more log output.
BUILD FAILED in 0s
插件的build.gradle脚本如下所示:
plugins {
id "com.gradle.plugin-publish" version "0.9.7"
id "com.github.hierynomus.license" version "0.11.0"
id 'nebula.nebula-release' version '4.0.1'
id "com.jfrog.bintray" version "1.7.3"
}
除此之外,公司政策规定我们必须通过内部工件服务器,因此以下内容已添加到settings.gradle文件中:
pluginManagement {
repositories {
maven {
url "https://artifactory/java-v"
}
}
}
jar文件存在于以下位置:https://artifactory/java-v/com/gradle/publish/plugin-publish-plugin/0.9.7/plugin-publish-plugin-0.9.7.jar
但是当我看到错误消息时,我有点困惑,它说它无法找到com.gradle.plugin-publish:com.gradle.plugin-publish.gradle.plugin:0.9.7。 它似乎用.gradle.plugin后缀了id。
有没有人知道我是在查看错误的位置,还是为什么用.gradle.plugin为id后缀。不应该看一下像这样的GAV的位置:com.gradle.plugin-publish:com.gradle.plugin-publish:0.9.7?
有没有人知道Gradle中新插件机制的解析机制是如何工作的。
提前致谢
修改 感谢Mateusz Chrzaszcz,我能够取得进步。
我对解决方案的唯一警告是它似乎是一种解决方法而不是解决方案。但它有效!
除了他的解决方案,你必须解决插件。我能够破解我的方式来实际解决相应的名称。
为了做到这一点,必须做如下:
以下是一个例子:
resolutionStrategy {
eachPlugin {
if (requested.id.namespace == 'com.gradle' && requested.id.name == 'plugin-publish') {
useModule('com.gradle.publish:plugin-publish-plugin:0.9.7')
} else if(requested.id.namespace == 'com.github.hierynomus' && requested.id.name == 'license') {
useModule('nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0')
}
}
}
答案 0 :(得分:0)
尝试实施插件分辨率规则。
根据gradle文档:
像那样:插件解析规则允许您修改插件{}块中的插件请求,例如更改请求的版本或显式指定实现工件坐标。 要添加解决方案规则,请使用pluginManagement {}块
中的resolutionStrategy {}
pluginManagement {
resolutionStrategy {
eachPlugin {
if (requested.id.namespace == 'com.gradle.plugin-publish') {
useModule('com.gradle.plugin-publish:0.9.7') //try a few combinations
}
}
}
repositories {
maven {
url 'https://artifactory/java-v'
}
}
}
请记住,这是一个孵化功能。