如何解决新的gradle格式混乱和迁移原因找不到方法testCompile
我有一个build.gradle与
plugins {
id {some plugin for all projects}
id "com.diffplug.spotless" version "5.1.1"
}
然后我有一个allprojects {}部分,它定义了一个应用插件:'jacoco',还有一个子项目{}部分,它声明了应用插件:'java',还有其他几个
立即添加一尘不染的东西和错误,发现它找不到Java插件,因此我将所有插件修改为像这样在插件部分
plugins {
id "java"
id "checkstyle"
id "eclipse"
id "idea"
id "jacoco"
id "com.diffplug.spotless" version "5.1.1"
id "com.dorongold.task-tree" version "1.5" //This prints out a task tree (pretty print)
}
然后导致此错误
Could not find method testCompile() for arguments [junit:junit:4.11] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
因此由于某种原因Java插件丢失了。我无法在这里找到合适的组合,以将所有内容迁移到这种新的插件部分格式。
我该怎么做?我随机尝试在所有项目和子项目中放置一个插件部分,但这会导致这个新错误
Could not find method plugins() for arguments [build_d8c2jgy4ua1m0vkv9kmvgefmc$_run_closure2$_closure5@62337fda] on root project 'providersvc-all' of type org.gradle.api.Project
此新插件部分如何工作?没有破坏一切,我似乎无法迁移。我只希望Java插件,testCompile和Spotless现在可以很好地一起玩
编辑(忘记附加无法使用的完整修整后的文件):
plugins {
id "java"
id "com.diffplug.spotless" version "5.1.1"
}
ext {
//dependency versions every project usees so we version in one location all jars(less jar hell this way)
deps = [
'junit': 'junit:junit:4.11'
]
}
allprojects {
repositories {
jcenter()
mavenCentral()
maven {
//webpieces VERSIONED snapshots so you can lock on a snapshot
url "https://dl.bintray.com/deanhiller/maven"
}
//For testing locally
maven {
url uri('/tmp/myRepo/')
}
}
}
subprojects {
dependencies {
testCompile deps['junit']
}
}
谢谢, 院长
解决方法
您仅将插件应用于根项目,而不是子项目。但是,如果您想通过subprojects
配置来配置插件,则必须使用apply plugin
语法。但是,如果您将两者结合在一起使用,则不必使用旧的buildscript
块来配置类路径和存储库。
这里是一个例子。我假设根项目不是Java项目。我还删除了您的评论,而是插入了我的评论,这是出于使它们更易于发现的唯一原因。
plugins {
id "com.diffplug.spotless" version "5.1.1" apply false // <-- Set "apply false" here
// This makes it configure which version to use on the classpath for the entire build,but without applying it.
// Notice that the Java plugin is not specified here anymore.
// This is because it is a core plugin so you can't set the version (and I am assuming you don't want it on in the root project).
}
ext {
deps = [
'junit': 'junit:junit:4.11'
]
}
allprojects {
repositories {
jcenter()
mavenCentral() // <-- You can remove this if you want as it is already present as a proxy in jcenter().
maven {
url "https://dl.bintray.com/deanhiller/maven"
}
maven {
url uri('/tmp/myRepo/')
}
}
}
subprojects {
// Here are the two plugins
apply plugin: "java"
apply plugin: "com.diffplug.spotless"
dependencies {
testImplementation deps['junit'] // <-- testCompile renamed to testImplementation as the former has been deprecated for a long time
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。