我有一个java/maven项目(基于pom),它
建造和发射都很好
使用时
java -jar
在命令行上由我的maven生成的uber jar上,使用
spring-boot-maven-plugin
以下内容:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.3.RELEASE</version>
<configuration>
<mainClass>com.company.Application</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
这个jar被创建(~100MB),并且
按预期发射。
但是,我无法在eclipse中使用右键单击pom中定义的主类上的run as-java应用程序配置来启动同一个应用程序。这是一个maven项目,m2e是最新的/刷新的,等等。
错误是:
java.lang.NoClassDefFoundError: Could not initialize class org.slf4j.LoggerFactory
显然,日志框架存在一些依赖性问题。
然而:
我的第一个抓狂是,
为什么在使用cli的maven中工作,而在使用m2e的eclipse中失败?
所以我去看了看这些路径,它们看起来一模一样。(查看eclipse中的maven依赖项列表,以及我的uber jar中包含的boot-inf目录)。
slf4j-api 1.7.25
log4j-over-slf4j 1.7.25
logback-core 1.2.3
logback-classic 1.2.3
commons-logging 1.1.3
所以,我调试了。
我在
NoClassDefFoundError
,并捕获了这个。注意,调试器在抛出异常时暂停,并且
监视表达式
在右上角是
getClass().getClassLoader().classes
,这是一个
Vector
是的。
我们怎么可能
LoggerFactory
,即使这门课现在
ClassLoader
是吗?我下一步应该去哪里?
编辑:
因为它引起了一些混乱,eclipse在其中捕获到这个错误的类(
Category.java
)不是我的课。它在依赖项中(请参阅eclipse标题栏),因此无法修改。