我已经做了网页搜索“插件请求插件已经在classpath必须不包括一个版本的网站:stackoverflow.com“,并没有发现什么特别的.搜索“插件请求插件已经在classpath必须不包括一个版本”(w/out SO)发现:https://discuss.gradle.org/t/error-plugin-already-on-the-classpath-must-not-include-a-version/31814,我在其中读到了答案,例如:
我在Grade插件文档中没有找到任何关于这个用例的参考资料。
错误
构建文件'/Users/username/github/OpCon/app/build.gradle'行:4解析插件[id:“com.android.应用程序”,版本:'3.4.1']
已在类路径上的插件的插件请求不能包含版本
出现在IntelliJ IDEA
,build.gradle(OpCon)中:
buildscript {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenCentral()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app/build.gradle
:
plugins {
id 'com.android.application' version '3.4.1' apply true
}
... and then other stuff
我不明白,classpath 'com.android.tools.build:gradle:3.5.2'似乎不包括'com.android. application'...如果在项目中搜索,“classpath”只有一个出现。
添加:
有趣的是,在https://maven.google.com/web/index.html上,我可以找到'com.android.tools.build:gradle:3.5.2',但没有'com.android.application'分支。
添加2:我已经下载(相当多的文件实际上是下载了一些原因)从这里采取的命令How can I download a specific Maven artifact in one command line?:mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -DrepoUrl='https://maven.google.com/' -Dartifact='com.android.tools.build:gradle:3.4.1'
在文件管理器中找到路径com.android.tools.build:gradle
,并仅在jar中查找:
username$ jar tvf /Users/username/.m2/repository/com/android/tools/build/gradle/3.4.1/gradle-3.4.1.jar | grep application
1115 Wed May 01 20:30:18 MSK 2019 com/android/build/gradle/internal/tasks/ApplicationIdWriterTask$applicationIdSupplier$1.class
55 Wed May 01 20:29:18 MSK 2019 META-INF/gradle-plugins/com.android.application.properties
所以在jar META-INF
中提到了gradle plugin
com.android.application
。
文件com.android.application.properties
是一行:implementation-class=com.android.build.gradle.AppPlugin
.
在web上搜索“implementation class java”可以找到有关接口的信息。在wiki https://en.wikipedia.org/wiki/Interface_(Java)中:
Java编程语言中的接口是一种抽象类型,用于指定类必须实现的行为。
那么gradle插件可能是一个接口?我如何进一步挖掘?
4条答案
按热度按时间xxslljrj1#
Gradle不允许在类路径中存在插件的多个版本。因此,如果您有一个多模块构建,则可能有多个模块使用不同版本声明了同一个插件。
要解决这个问题,您需要在一个地方指定一个版本,即settings.gradle
例如,将以下内容放入
settings.gradle
中然后在单独的模块gradle文件中,您将执行以下操作(未提及版本)
仅供记录,问题中提到的错误也可能会显示此消息
插件在不同的子项目中加载了多次,这不受支持,可能会破坏构建
j8yoct9x2#
我也遇到了同样的问题,我使用的是带有插件的spring Boot ,如下所示
由于此插件存在于一个依赖项中,Gradle正在抱怨它。我简单地删除了这些依赖项,它工作了:
csbfibhn3#
使用
apply false
将配置放入根项目中的build.gradle
。然后你可以把它到处都没有版本
更多信息:->Example 3. Applying plugins only on certain subprojects
bogh5gae4#
对我来说,在项目级别的
build.gradle
中有这个就足够了,而不需要提到版本:然后在每个模块级
build.gradle
中包含您想要应用的插件:请注意,我使用的是Gradle版本目录