包含Apache元模型的SpringBoot项目无法使用java.lang.NoClassDefFoundError启动:com/google/common/util/concurrent/FutureFallback

包含Apache元模型的SpringBoot项目无法使用java.lang.NoClassDefFoundError启动:com/google/common/util/concurrent/FutureFallback,java,Java,我正在构建一个基于SpringBoot的项目,该项目将包括Apache元模型。SpringBoot是1.5.8版 启动SpringBoot应用程序效果很好,我可以访问已发布的页面。目前,该项目几乎是一个框架应用程序,只有非常基本的功能 然而,我补充说: compile 'org.apache.metamodel:MetaModel-full:5.0.0' 对于我的Gradle依赖项,启动失败,出现了臭名昭著的NoClassDefFound FutureFallback异常。没有添加其他代码,也

我正在构建一个基于SpringBoot的项目,该项目将包括Apache元模型。SpringBoot是1.5.8版

启动SpringBoot应用程序效果很好,我可以访问已发布的页面。目前,该项目几乎是一个框架应用程序,只有非常基本的功能

然而,我补充说:

compile 'org.apache.metamodel:MetaModel-full:5.0.0'
对于我的Gradle依赖项,启动失败,出现了臭名昭著的NoClassDefFound FutureFallback异常。没有添加其他代码,也没有添加或修改配置:复制问题只需要包含编译声明就可以导致启动失败

正如其他答案所建议的那样,我尝试过包括各种版本的Guava和MetaModel本身,但它们都不能改变启动失败

因此,我的gradle.build当前是:

buildscript {
repositories {
    jcenter()
    mavenCentral()
}
dependencies {
    classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.1'
}
}

apply plugin: 'java'
apply plugin: 'org.junit.platform.gradle.plugin'  

repositories {
    mavenCentral()
}

dependencies {
    compile project(':commons')
    compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
    compile 'org.apache.metamodel:MetaModel-full:5.0.0'
    compile 'mysql:mysql-connector-java:8.0.8-dmr'
    compile 'com.microsoft.sqlserver:mssql-jdbc:6.3.4.jre8-preview'
    compile 'org.reflections:reflections:0.9.11'
    compile 'com.datastax.cassandra:cassandra-driver-core:3.3.1'
//    compile 'com.google.guava:guava:23.4-jre'    
    compile 'com.google.guava:guava:20.0'    
    testCompile (
        'org.junit.jupiter:junit-jupiter-api:5.0.1',
        'org.mockito:mockito-core:2.10.0'
    )
    testRuntime(
        'org.junit.jupiter:junit-jupiter-engine:5.0.1',
        'org.mockito:mockito-core:2.10.0'
    )

}
对番石榴版本进行修补的证据显而易见。已经试用了版本16、19、20和23.4-jre


其他修复方法的想法非常受欢迎。

我设法解决了这个问题,将卡桑德拉排除在构建之外compile('org.apache.metamodel:metamodel full:5.0.0'){``排除组:'org.apache.metamodel',模块:'metamodel cassandra'````更好的解决方案:将模块保留在构建类路径中,以便以后可以根据需要使用,并排除主应用程序中的SpringBoot自动配置:
@EnableAutoConfiguration(exclude={CassandraAutoConfiguration.class})
我通过从构建中排除Cassandra来解决这个问题。`compile('org.apache.metamodel:metamodel full:5.0.0'){`exclude group:'org.apache.metamodel',module:'metamodel Cassandra'`}`更好的解决方案是:将模块保留在构建类路径中,以便以后可以根据需要使用,并在主应用程序中排除SpringBoot自动配置:
@EnableAutoConfiguration(exclude={CassandraAutoConfiguration.class})