java.lang.NoClassDefFoundError:尝试运行jar时

java.lang.NoClassDefFoundError:尝试运行jar时,java,gradle,spring-boot,jar,build.gradle,Java,Gradle,Spring Boot,Jar,Build.gradle,我有一个使用gradle的spring boot项目 apply plugin: 'java' apply plugin: 'idea' apply plugin: 'jetty' apply plugin: 'war' apply plugin: 'org.springframework.boot' repositories { mavenCentral() } dependencies { compile("org.springframework.boot:spring-

我有一个使用gradle的spring boot项目

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'jetty'
apply plugin: 'war'
apply plugin: 'org.springframework.boot'

repositories {
    mavenCentral()
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.5.1.RELEASE") {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-jetty', version: '1.5.1.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: '1.5.1.RELEASE'
    compile group: 'org.springframework', name: 'spring-webmvc', version: '4.3.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-context-support', version: '4.3.6.RELEASE'
    compile group: 'org.springframework', name: 'spring-orm', version: '4.3.6.RELEASE'
    compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
    compile group: 'org.freemarker', name: 'freemarker', version: '2.3.23'
    compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.5'
    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.1.4.Final'
    compile group: 'commons-validator', name: 'commons-validator', version: '1.5.1'
    compile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '1.5.1.RELEASE'
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.2'
}

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.1.RELEASE")
    }
}

jar {
    baseName = 'base-name'
    version = '0.1.0'
    manifest {
        attributes 'Main-Class': 'some.application.Application'
    }
}

sourceCompatibility = 1.8
targetCompatibility = 1.8
我使用
/gradlew清洁罐

然后尝试使用
java-jar.jar

然而,我得到一个错误的说法

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
        at some.application.Application.main(Application.java:11)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more
我很困惑,为什么我可以在IDE中运行它,但不能作为一个jar运行。我还发现我的jar根本不包含任何库

编辑:

这是我的
应用程序。class

包装一些应用程序

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application
{
    public static void main(String[] args)
    {
        SpringApplication.run(Application.class, args);
    }
}

这是因为您的依赖项没有包含在最终jar文件中

请看一下示例或示例

或者使用
/gradlew clean build
自动正确打包应用程序。看看

  • build.gradle
    中定义名为
    fatJar
    的任务:
  • 运行
    gradle-fatJar
    /gradlew-fatJar
    生成一个包含所有依赖项的
    jar
    文件,该文件可以独立运行,但大小可能相当大(这就是为什么它被称为胖jar)

  • 我会比较IDE使用的路径和JAR的内容您的代码中有springboot条目类吗?@EduardoDennis编辑的问题显示了我的
    应用程序.java
    。这就是你所说的spring boot entry类吗?@efekctive我刚刚检查了我的jar,显然它根本不包含任何spring boot jar。这就解释了为什么它不能运行任何东西。你知道我是怎么把spring boot罐子塞进罐子的吗?当你安装gradle时会发生什么?它不会带来依赖?很美。从{(configurations.runtime).collect{it.isDirectory()?it:zipTree(it)}}添加
    对我来说非常有吸引力:)谢谢!
    jar {
        baseName = 'base-name'
        version = '0.1.0'
        manifest {
            attributes(
                    'Main-Class': 'com.github:'
            )
        }
    }
    
    task fatJar(type: Jar) {
        manifest.from jar.manifest
    //    classifier = 'all'
        from {
            configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) }
        } {
            exclude "META-INF/*.SF"
            exclude "META-INF/*.DSA"
            exclude "META-INF/*.RSA"
        }
        with jar
    }
    
    artifacts {
        archives fatJar
    }