包含Apache元模型的SpringBoot项目无法使用java.lang.NoClassDefFoundError启动:com/google/common/util/concurrent/FutureFallback
我正在构建一个基于SpringBoot的项目,该项目将包括Apache元模型。SpringBoot是1.5.8版 启动SpringBoot应用程序效果很好,我可以访问已发布的页面。目前,该项目几乎是一个框架应用程序,只有非常基本的功能 然而,我补充说:包含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异常。没有添加其他代码,也
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})