我尝试进行设置,以便我可以使用Gradle Versions Plugin,而无需将其添加到我的所有build.gradle
文件中。
根据this answer to a related question,我尝试创建文件~/.gradle/init.d/50-ben-manes-versions.gradle
:
initscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.ben-manes:gradle-versions-plugin:0.17.0'
}
}
allprojects {
apply plugin: com.github.ben-manes.versions
}
如果我尝试在我的仓库中调用./gradlew dependencyUpdates
,我会得到:
FAILURE: Build failed with an exception.
* Where:
Initialization script '~/.gradle/init.d/50-ben-manes-versions.gradle' line: 13
* What went wrong:
Could not get unknown property 'com' for root project 'project-name' of type org.gradle.api.Project.
该答案说不使用插件名称周围的引号,但由于这不起作用,我尝试添加引号(即:apply plugin: 'com.github.ben-manes.versions'
)。我得到了:
FAILURE: Build failed with an exception.
* Where:
Initialization script '~/.gradle/init.d/50-ben-manes-versions.gradle' line: 13
* What went wrong:
Plugin with id 'com.github.ben-manes.versions' not found.
有没有办法从脚本中应用Gradle Versions插件?
顺便说一句,我正在使用Gradle 4.3.1。
答案 0 :(得分:4)
插件可以通过几种不同的方式应用。在问题的引用答案中,它们是applied by type。您还可以apply by plugin Id, which is a String
。
在您通过Id申请的第二次尝试中,您正在做正确的事情,但构建错误与:
带有id' com.github.ben-manes.versions'的插件没找到。
这里的问题是你currently cannot apply plugins by Id from init scripts (#gradle/1322)。
解决方案是改为按类型应用插件。
幸运的是,该插件是开源的,所以发现插件的类型相对简单。插件ID为com.github.ben-manes.versions
,引导我们转到META-INF/gradle-plugins/com.github.ben-manes.versions.properties
file。该文件包含行implementation-class=com.github.benmanes.gradle.versions.VersionsPlugin
,它告诉我们插件的类型是
com.github.benmanes.gradle.versions.VersionsPlugin
。这也可以通过将插件应用于构建(而不是通过init脚本)并检查项目中的plugins
或pluginManager
以列出插件类型来确定。
要使修改更改此行:
apply plugin: 'com.github.ben-manes.versions'
为:
apply plugin: com.github.benmanes.gradle.versions.VersionsPlugin
所以完整的,工作原文是:
initscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.ben-manes:gradle-versions-plugin:0.17.0'
}
}
allprojects {
apply plugin: com.github.benmanes.gradle.versions.VersionsPlugin
}
答案 1 :(得分:1)
我现在正在使用@mkobit的解决方案。它工作得很好,但是当您正在处理的项目已经应用了版本插件时,它不支持这种情况。
我正在使用该脚本的稍作修改的版本,如果该插件已经存在,则不应用该插件:
initscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.ben-manes:gradle-versions-plugin:0.21.0'
}
}
allprojects {
afterEvaluate { project ->
if (project.parent == null) {
def hasPlugin = project.plugins.any {
it.class.name == "com.github.benmanes.gradle.versions.VersionsPlugin"
}
if (!hasPlugin) {
project.apply plugin: com.github.benmanes.gradle.versions.VersionsPlugin
}
}
}
}