找不到参数的方法 bootJar()

Posted

技术标签:

【中文标题】找不到参数的方法 bootJar()【英文标题】:Could not find method bootJar() for arguments 【发布时间】:2018-04-12 13:48:38 【问题描述】:

在构建 gradle 项目时,我遇到了错误- FAILURE:构建失败并出现异常。

在哪里: 构建文件 '/Users/vdubey/Documents/microservices/workspace/Promo-Service/build.gradle' 行:30

出了什么问题: 评估根项目“Promo-Service”时出现问题。

在 org.gradle.api.Project 类型的根项目“Promo-Service”上找不到参数 [build_3jq74tz48uic808y18txabjvx$_run_closure1@5c4aa147] 的方法 bootJar()。

尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。

通过https://help.gradle.org获得更多帮助

有什么线索会失败吗?

【问题讨论】:

发布 gradle 文件的第 30 行附近的部分,以及您尝试运行的 gradle 命令。 我正在使用 bootJar baseName = 'promo-service' version = '0.0.1' 试图将我的 gradle 转换为 jar 。我将其删除并已放入其他位置但仍然没有工作吗? 你找到问题了吗?我正在关注 spring boot Docker 指南并遇到了同样的错误 【参考方案1】:

我在遵循 Spring Boot with Docker 指南时遇到此错误,因为我的应用程序使用的是 Spring Boot 1.5.10.RELEASE 并且 bootRun 仅在 2.0.0 中引入。

幸运的是,Spring Boot Docker 指南代码位于 Github 存储库中,因此我能够导航回 2.0.0 之前的版本:https://github.com/spring-guides/gs-spring-boot-docker/tree/8933f6efa9a94cf596095658dc0b81986d11a3ec

查看完整的 build.gradle 文件以了解 1.5.10-RELEASE:

// This is used as the docker image prefix (org)
group = 'springio'

jar 
    baseName = 'gs-spring-boot-docker'
    version =  '0.1.0'


// tag::task[]
docker 
    name "$project.group/$jar.baseName"
    files jar.archivePath
    buildArgs(['JAR_FILE': "$jar.archiveName"])

// end::task[]

【讨论】:

【参考方案2】:

考虑检查 Spring Boot 的 gradle 插件是否存在: https://plugins.gradle.org/plugin/org.springframework.boot

对于 Gradle 2.1 及更高版本:

plugins 
  id "org.springframework.boot" version "2.1.0.RELEASE"

对于较旧的 Gradle 版本:

buildscript 
  repositories 
    maven 
      url "https://plugins.gradle.org/m2/"
    
  
  dependencies 
    classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.RELEASE"
  


apply plugin: "org.springframework.boot"

【讨论】:

【参考方案3】:

我在关注official Spring testing-web guide 时遇到了这个问题。他们提供如下初始 gradle 文件。

buildscript 
    repositories  mavenCentral() 


plugins  id "io.spring.dependency-management" version "1.0.4.RELEASE" 

ext  springBootVersion = '2.0.5.RELEASE' 

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'

bootJar 
    baseName = 'gs-testing-web'
    version =  '0.1.0'


repositories 
    mavenCentral()


sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies 
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test")


task wrapper(type: Wrapper) 
    gradleVersion = '4.6'

但是当我运行./gradlew clean 命令时,我得到以下异常

Could not find method bootJar() for arguments [] on root project '' of type org.gradle.api.Project.

问题在于使用id "org.springframework.boot" version "2.1.3.RELEASE" 而不是使用plugins id "io.spring.dependency-management" version "1.0.4.RELEASE" 。也不要忘记 java 和 io.spring.dependency-management 插件。

apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'

8.1。对 Java 插件的反应

当 Gradle 的 java 插件应用于项目时,Spring Boot 插件: 创建一个名为 bootJar 的 BootJar 任务,该任务将创建一个可执行文件, 项目的胖罐子。罐子将包含所有的东西 主源集的运行时类路径;类被打包在 BOOT-INF/classes和jars打包在BOOT-INF/lib中

8.4。响应依赖管理插件

当 io.spring.dependency-management 插件被应用到一个 项目中,Spring Boot 插件会自动导入 spring-boot-dependencies bom.

我在下面分享了有效的 build.gradle 文件,对于遇到此问题的任何人来说,该文件都可以作为起点。

/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * user guide available at https://docs.gradle.org/4.6/userguide/tutorial_java_projects.html
 */
plugins 
    id "org.springframework.boot" version "2.1.3.RELEASE"


apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'

ext 
    springBootVersion = '2.1.3.RELEASE'

// In this section you declare where to find the dependencies of your project
repositories 
    // You can declare any Maven/Ivy/file repository here.
    mavenCentral()


bootJar 
    mainClassName = 'com.softwarelabs.App'
    baseName = 'spring-boot-integration-test'
    version = '0.1.0'


sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies 
    compile("org.springframework.boot:spring-boot-starter-web")
    // This dependency is found on compile classpath of this component and consumers.
    compile 'com.google.guava:guava:23.0'

    testCompile("org.springframework.boot:spring-boot-starter-test")
    // Use JUnit test framework
    testCompile 'junit:junit:4.12'


task wrapper(type: Wrapper) 
    gradleVersion = '4.6'

更多详情请查看spring boot gradle plugin documentation getting started 部分。

检查Spring Boot plugin reacts by other plugins如何。

【讨论】:

【参考方案4】:

我在构建已下载的存储库时遇到此错误。 我可以通过修改我的build.gradle 以包含spring-boot-gradle-plugin 的buildscript 依赖项并将org.springframework.boot 作为插件应用来解决同样的问题

buildscript 
ext 
    springBootVersion = '<Spring boot version>'

repositories 
     ...<my repository config>... 

 
// These are gradle build dependencies and not application requirements
dependencies 
    ...<other dependencies>...
    classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion"



apply plugin: 'org.springframework.boot'

【讨论】:

以上是关于找不到参数的方法 bootJar()的主要内容,如果未能解决你的问题,请参考以下文章

Gradle build:找不到参数的方法signingConfig()

找不到参数的方法 create() - Crashlytics 问题

找不到与Java版本匹配的alpn-boot JAR:12.0.2

找不到参数 Android 的方法 dependenciesInfo()

找不到参数的方法 kapt()

找不到对象上的参数 [project ':model'] 的方法 api()