如何为Maven项目创建可执行JAR?执行时遇SLF4J错误求助
解决Maven可执行JAR打包的SLF4J绑定错误与初始化异常
嘿,我来帮你搞定这个问题!你碰到的这两个错误是连锁反应:首先是SLF4J找不到具体的日志实现,进而导致了ExceptionInInitializerError(因为你的Reifier类在初始化时用到了SLF4J日志,却没法正常加载)。下面是一步步的解决办法:
1. 补全SLF4J的日志实现依赖
SLF4J本身只是个日志门面,必须搭配具体的日志实现才能工作。你需要在pom.xml里添加以下其中一种依赖:
选项1:轻量的SLF4J Simple实现
适合简单项目,直接添加:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.36</version> <!-- 替换为最新稳定版即可 --> <scope>runtime</scope> </dependency>
选项2:功能更全的Logback实现(推荐)
如果需要日志配置、滚动日志等进阶功能,添加:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.11</version> <!-- 替换为最新稳定版 --> <scope>runtime</scope> </dependency>
2. 确保Maven打包时包含所有依赖(构建Fat JAR)
默认的Maven jar插件只会打包你的代码,不会包含依赖,这也是运行时找不到SLF4J实现的核心原因之一。推荐用maven-shade-plugin来构建包含所有依赖的可执行Fat JAR:
在pom.xml的<build><plugins>节点里添加以下配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <!-- 替换成你的主类全路径 --> <mainClass>me.vijaychavda.rdfr.Reifier</mainClass> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>me.vijaychavda.rdfr.Reifier</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
3. 重新打包并运行
执行Maven命令完成打包:
mvn clean package
然后找到target目录下的Fat JAR(通常命名为{项目名}-{版本}-shaded.jar),运行测试:
java -jar target/your-project-name-shaded.jar
这样就能解决SLF4J绑定缺失的问题,进而消除ExceptionInInitializerError啦!
内容的提问来源于stack exchange,提问作者Vijay Chavda
相关产品推荐
相关产品推荐

