You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven项目打包含Log4j2依赖的Jar后运行报错的解决咨询

Maven项目打包含Log4j2依赖的Jar后运行报错的解决咨询

看起来你接连遇到了Maven打包清单配置问题和日志依赖冲突的问题,我来一步步帮你梳理解决思路和修改方案:

一、先清理重复的Maven打包插件配置

你当前的pom里重复配置了两次maven-shade-plugin,这会导致打包流程混乱,冗余配置也容易引发未知问题。我们只需要保留一个整合了主类指定、依赖合并和签名文件过滤的shade插件配置即可(shade插件可以同时帮你把依赖打包进Jar,并设置主清单属性,不需要额外单独配置maven-jar-plugin,用shade更省心)。

二、解决致命的日志依赖冲突

你的依赖里同时存在slf4j-nop、slf4j-log4j12和log4j-core,这三个是完全冲突的:

  • slf4j-nop是让SLF4J禁用所有日志输出
  • slf4j-log4j12是把SLF4J日志桥接到Log4j 1.x
  • log4j-core是Log4j 2.x的核心实现
    这三个同时存在会让SLF4J无法确定使用哪个日志绑定,进而导致Log4j2初始化失败,也就是你看到的java.lang.UnsupportedOperationException: No class provided, and an appropriate one cannot be found错误。

因为matheclipse-core依赖的是Log4j2,所以我们需要:

  1. 移除slf4j-nop和slf4j-log4j12
  2. 添加适配Log4j2的SLF4J绑定slf4j-log4j2
  3. 可选:给matheclipse-core添加依赖排除,避免它传递进来的冲突日志依赖

修改后的完整pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.calculator</groupId>
    <artifactId>GraphingCalculator</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>23</maven.compiler.source>
        <maven.compiler.target>23</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.matheclipse</groupId>
            <artifactId>matheclipse-core</artifactId>
            <version>3.0.0</version>
            <!-- 可选:排除matheclipse-core可能传递的冲突日志依赖 -->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 保留Log4j2核心 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.21.1</version>
        </dependency>
        <!-- 添加SLF4J到Log4j2的绑定,替代原来的冲突绑定 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j2</artifactId>
            <version>2.0.9</version>
        </dependency>
        <!-- 保留jlatexmath依赖 -->
        <dependency>
            <groupId>org.scilab.forge</groupId>
            <artifactId>jlatexmath</artifactId>
            <version>1.0.7</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- 只保留一个整合后的shade插件配置 -->
            <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>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.calculator.Main</mainClass>
                                </transformer>
                            </transformers>
                            <!-- 过滤掉依赖中的签名文件,避免打包后验证错误 -->
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

最后验证步骤

  1. 执行打包命令:mvn clean package
  2. 运行生成的可执行Jar:java -jar GraphingCalculator-1.0-SNAPSHOT.jar
  3. (可选)如果需要自定义日志输出,可以在src/main/resources下添加log4j2.xml配置文件,比如最简单的控制台输出配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

这样应该就能解决你遇到的“no main manifest attribute”和日志初始化错误的问题了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:18:04