当我们试图升级我们的一些脚本,在我们使用的插件上升级到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,我才能进步。
我对解决方案的唯一警告是,这似乎是一种解决办法,而不是一种解决办法。但很管用!
除了他的解决方案,你还必须解决插件。我能够破解我的方式,真正解决适当的名字。
为了做到这一点,我们必须这样做:
以下是一个例子:
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')
}
}
}发布于 2017-07-21 23:37:24
尝试实现插件解析规则。
根据gradle文件:
插件解析规则允许您修改插件{}块中的插件请求,例如更改请求的版本或显式指定实现工件坐标。若要添加解析规则,请在resolutionStrategy {}块内使用pluginManagement {}
就像这样:
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'
}
}
}记住,这是孵化器的特性。
https://stackoverflow.com/questions/45247952
复制相似问题