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

运行Jar包时报java.lang.ClassNotFoundException: net.sf.jasperreports.engine.JRException如何解决

JasperReports打包JAR后ClassNotFoundException解决方案

核心原因

IDEA运行时会自动加载项目所有配置的依赖到类路径,打包为独立JAR运行时出现java.lang.ClassNotFoundException: net.sf.jasperreports.engine.JRException,本质是JAR包内未包含jasperreports的核心依赖类。

修复方案

如果你使用Maven构建项目

普通Java项目

配置maven-assembly-plugin插件,将所有依赖一并打入JAR:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.6.0</version>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>替换为你的主类全限定名,比如com.xxx.SchoolManagementApplication</mainClass>
          </manifest>
        </archive>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

执行mvn clean package后,使用生成的文件名带jar-with-dependencies后缀的JAR运行即可。

Spring Boot项目

直接使用官方spring-boot-maven-plugin即可,只需确认pom.xml中jasperreports的依赖scope未设置为provided:

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>你使用的版本号</version>
    <!-- 不要加<scope>provided</scope> -->
</dependency>

如果你使用Gradle构建项目

普通Java项目

在build.gradle中添加如下配置,打包时包含所有依赖:

jar {
    manifest {
        attributes 'Main-Class': '替换为你的主类全限定名'
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

Spring Boot项目

直接使用bootJar任务打包即可,同样确认jasperreports依赖无provided scope。

额外检查项

  • 若项目中用到.jasper/.jrxml模板文件,确保模板放在resources目录下,读取时使用类路径资源读取方式:this.getClass().getResourceAsStream("/reports/你的模板文件名.jasper"),不要使用本地文件绝对路径。
  • 如果你采用外置依赖目录的方式运行,需将所有jasperreports相关JAR放入依赖目录,启动时指定类路径:java -cp "你的项目.jar:lib/*" 主类全限定名

内容的提问来源于stack exchange,提问作者Brunner Arthur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:54:03