当前位置: 首页 > 知识库问答 >
问题:

无法找到或加载主类gradle 7.0 spring boot 2.5.6

潘皓
2023-03-14

我刚刚从spring boot版本“2.2.1.RELEASE”更新到了2.5.6,同时我也将gradle版本更新到了7.0。在更新之前一切正常,但是在更新之后,bootRun任务似乎没有找到主类。

这是收到的错误:

在此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 8.0 不兼容。使用“--警告模式全部”来显示各个弃用警告。查看 https://docs.gradle.org/7.0/userguide/command_line_interface.html#sec:command_line_warnings 12 个可操作的任务:12 个已执行

错误:无法找到或加载主类com.test.TestApplication

失败:构建失败,但有一个异常。

我遵循了文档 https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/#running-your-application,我有以下build.gradle

buildscript {
    ext {
        springBootVersion = '2.5.6'
    }
    repositories {
    // ..
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath "org.springframework.boot:spring-boot-starter-jersey:${springBootVersion}"
        classpath("net.ltgt.gradle:gradle-apt-plugin:0.15")
        classpath 'gradle.plugin.com.palantir.gradle.gitversion:gradle-git-version:0.11.0'
    }
}

apply plugin: "java"
apply plugin: "war"
apply plugin: 'eclipse'
apply plugin: "idea"
apply plugin: "org.sonarqube"
apply plugin: "jacoco"
apply plugin: "maven-publish"
apply plugin: "net.ltgt.apt"
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'com.palantir.git-version'

def mapStructVersion = "1.3.0.Final"
def swaggerVersion = "1.6.3"
def junitVersion = "4.13.2"

sourceCompatibility = 1.8

sourceSets {
    main {
        java {
            srcDir "${buildDir.absolutePath}/generated/source/apt/main"
        }
    }
    test {
        java {
            srcDir "${buildDir.absolutePath}/generated/source/apt/main"
        }
    }
}

configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, "seconds"
}

repositories {
    // ...
}

task preBuild {
    delete "${buildDir.absolutePath}/generated/source/apt/main"
}

build.dependsOn preBuild

configurations {
    developmentOnly.extendsFrom compile
    runtimeClasspath {
        extendsFrom developmentOnly
    }
}

/**
 * Fix extension/file too long issue under windows
 */
task pathingJar(type: Jar) {
    dependsOn configurations.developmentOnly
    archiveAppendix = 'pathing'

    doFirst {
        manifest {
            attributes "Class-Path": configurations.developmentOnly.files.collect {
                it.toURI().toString().replaceFirst(/file:\/+/, '/')
            }.join(' ')
        }
    }
}

/**
 * With gradle 7, a duplicate strategy must be set in order to not encountering error during copy operation.
 * Solution: EXCLUDE strategy do not allow duplicates by ignoring subsequent items to be created at the same path.
 */
processIntegrationTestResources {
    duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
}

bootRun {
    main = 'com.test.TestApplication'
    dependsOn pathingJar
    doFirst {
        classpath = files(sourceSets.main.output.files, pathingJar.archiveFile)
    }
    def debugPort = project.properties["${project.name}.debugPort"]
    if (debugPort) {
        jvmArgs = ["-Xdebug", "-Xnoagent", "-Djava.compiler=NONE", "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=${debugPort}"]
    }
    if (System.getProperty("LOG_PATH") == null) {
        System.setProperty("LOG_PATH", project.projectDir.getCanonicalPath() + "/log")
    }
    if (System.getProperty("spring.profiles.active") == null) {
        System.setProperty("spring.profiles.active", "some-profile")
    }
    if (System.getProperty("servicelayer.rrLogHumanReadable") == null) {
        System.setProperty("servicelayer.rrLogHumanReadable", "true")
    }
    systemProperties = System.properties
}

def compileDependencies = [
        "org.springframework.cloud:spring-cloud-starter-bootstrap:3.0.4",
        "org.springframework.boot:spring-boot-starter-web",
        "org.springframework.boot:spring-boot-starter-jersey",
        "org.springframework.boot:spring-boot-starter-security",
        "org.springframework.boot:spring-boot-starter-actuator",
        "org.springframework.boot:spring-boot-starter-data-jpa",
        "org.springframework.boot:spring-boot-starter-cache",
        "io.swagger:swagger-jersey2-jaxrs:${swaggerVersion}",
        "io.jsonwebtoken:jjwt:0.9.0",
        "org.bitbucket.b_c:jose4j:0.6.3",
        'org.flywaydb:flyway-core',
        "org.mapstruct:mapstruct-jdk8:${mapStructVersion}",
        "com.github.ben-manes.caffeine:caffeine",
        'org.bouncycastle:bcprov-jdk15on:1.60'
]

// defined some dependencies. Not relevant

dependencies {
    implementation compileDependencies
    providedRuntime providedRuntimeDependencies
    testImplementation testCompileDependencies
}

我尝试了两种方式,从命令行和ide (IntelliJ)

clean bootRun -Dspring.profiles.active="some-profile"

共有1个答案

萧允晨
2023-03-14

我找到了解决方案,问题一直在任务路径罐内。

以前:

  task pathingJar(type: Jar) {
    dependsOn configurations.developmentOnly
    archiveAppendix = 'pathing'

    doFirst {
        manifest {
            attributes "Class-Path": configurations.developmentOnly.files.collect {
                it.toURI().toString().replaceFirst(/file:\/+/, '/')
            }.join(' ')
        }
    }
}

之后:

task pathingJar(type: Jar) {
    dependsOn configurations.runtimeClasspath
    archiveAppendix = 'pathing'

    doFirst {
        manifest {
            attributes "Class-Path": configurations.runtimeClasspath.files.collect {
                it.toURI().toString().replaceFirst(/file:\/+/, '/')
            }.join(' ')
        }
    }
} 

因此,解决方案是更改以下两行代码

依赖于配置。仅限开发-

属性"类路径":configurations.developmentOnly.files.collect{...}-

长话短说,不知何故,另一个任务干扰了开发仅范围的任务,我不得不将其更改为运行时Classpah

编辑:

另一个问题可能是bootRun任务内部的问题。您可以定义包,其中是主类。

bootRun {
    main = 'edu.somepacke.MyMainClass'
    dependsOn pathingJar
    doFirst {
        classpath = files(sourceSets.main.output.files, pathingJar.archiveFile)
    }
    //extra logic
}  
 类似资料:
  • 问题内容: 我正在尝试使用Gradle运行一个非常简单的项目,并在使用时遇到以下错误: 这是我的文件结构: 我排除了libs和tmp文件夹的内容,因为我认为这与该问题无关,但是我可以在需要时添加它。 这是我的build.gradle文件: 关于如何解决此问题的任何想法?我已经为mainClassName属性尝试了各种方法,但似乎没有任何效果。 问题答案: 我在这里看到两个问题,一个与另一个有关。

  • 我的java应用程序编译有问题。 编译器说:

  • 我是按照Spring的教程,一切都工作正常,直到我克隆我的项目,现在克隆的项目和原来的项目不想工作,我已经搜索槽整个堆栈溢出类似的问题,我无法解决这个问题,我已经清理了项目,重新启动eclipse,更新,添加和删除依赖项从pom.xml似乎没有什么工作。 这是我的主要课程: Beans.xml: 波姆。xml: 正如我所说,当我在同一个工作区复制粘贴项目时,一切都开始失败,当然我更改了名称。 这个

  • 我用的是软呢帽19。HelloWorld的内容。爪哇: 我可以使用 javac HelloWorld。JAVA 但我无法使用 java HelloWorld 它给出了以下错误 错误:无法找到或加载主类HelloWorld 但我可以用 sudo java HelloWorld 我错过了什么???

  • 我知道这个问题已经被回答过很多次了,但不幸的是我找不到我的问题的正确答案。 以下是我的软件包结构,在我的软件包中,我有简单测试.java d: \junit\src\junitfaq\SimpleTest.java 在d:\junit\src内部 d:\junit\src 但是当我尝试使用下面的命令行运行程序时 d:\junit\src 发生了此错误。错误:无法找到或加载主类junitfaq.Si

  • 问题内容: 我想连接我的java程序以连接数据库并检索数据。它的编译完美,但运行时即时得到这个 我已经安装了Java SQL驱动程序,并将jar路径作为CLASSPATH添加到环境变量中 问题答案: 您应该从这里下载驱动程序 和JAR文件需要添加到项目类路径。 首先,右键单击Eclipse Project,然后单击Project-> Build Path-> Configure Build Pat

  • 我有两个套餐和课程第一个套餐 D:\User\java\java\u programs\mypackage\A.java C中还有一个B类:\Package1\B. java 我编辑 C+++包 它为A.java和B.java创建了类文件 但我不能运行我的代码 我试过了 但是错误 错误:无法找到或加载主类包1。B

  • 我试图复制Spring Boot Kotlin示例项目https://github.com/jetbrains/kotlin-examples/tree/master/tutorials/spring-boot-restful。我添加了更多的依赖项,当我试图构建可执行jar并运行它时,我得到了错误: