1

我有一个 build.gradle

plugins {
   id {some plugin for all projects}
   id "com.diffplug.spotless" version "5.1.1"
}

然后我有一个 allprojects {} 部分,它定义了一个 apply plugin: 'jacoco' 和一个 subprojects {} 部分,它声明了 apply plugin: '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 和一尘不染现在一起玩得很好

编辑(忘记附加不起作用的完整修剪文件):

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']
   }
}

谢谢,院长

4

1 回答 1

1

您只是将插件应用于根项目 - 而不是子项目。但是,如果您想通过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
   }
}
于 2020-08-17T16:09:53.223 回答