【问题标题】:Cannot get Jasper Reports to work - Getting java.lang.NoClassDefFoundError: net/sf/jasperreports/engine/JasperCompileManager [duplicate]无法让 Jasper 报告工作 - 获取 java.lang.NoClassDefFoundError:net/sf/jasperreports/engine/JasperCompileManager [重复]
【发布时间】:2020-01-23 07:52:01
【问题描述】:

我正在尝试让 Jasper 报告工作,但我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/jasperreports/engine/JasperCompileManager
        at com.suhail.main.JasperCSVDataSource.start(JasperCSVDataSource.java:21)
        at com.suhail.main.CommandLineRunner.main(CommandLineRunner.java:8)
Caused by: java.lang.ClassNotFoundException: net.sf.jasperreports.engine.JasperCompileManager
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        ... 2 more

我无法理解其中的原因。这是我的项目层次结构的样子:

CommandLineRunner 类是调用JasperCSVDataSource 的主类。

这是我的 CommandLineRunner 类的样子:

package com.zetcode.main;

public class CommandLineRunner {

    public static void main(String[] args) throws Exception {

        JasperCSVDataSource app = new JasperCSVDataSource();
        app.start();
    }
}

导致错误的类JasperCSVDataSource是:

package com.zetcode.main;

import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.*;

public class JasperCSVDataSource {

    public void start() throws JRException {
        try {
            System.out.println("In here!");
            String xmlFile = "src/main/resources/report2.xml";
            JasperReport report = JasperCompileManager.compileReport(xmlFile);

            String[] columnNames = new String[] {"Name", "Quantity"};

             String fileName = "src/main/resources/items.csv";
             JRCsvDataSource ds = new JRCsvDataSource(fileName);
             ds.setColumnNames(columnNames);

             Map parameters = new HashMap();

             JasperPrint jprint = JasperFillManager.fillReport(report, parameters, ds);

             JasperExportManager.exportReportToPdfFile(jprint,
                     "src/main/resources/report2.pdf");
        }catch(Exception e) {
            System.out.println("Error!!");
            System.err.println(e);
        }
    }
}

pom.xml 如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
<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.zetcode</groupId>
    <artifactId>JasperCSVDataSource</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>

        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.8.0</version>
        </dependency>

    </dependencies>    

</project>

要运行代码,我执行以下操作:

mvn dependency:build-classpath
cd target/classes
java com/zetcode/main/CommandLineRunner

我做错了什么?

【问题讨论】:

    标签: java maven jasper-reports


    【解决方案1】:

    曾几何时,我们也为此花费了数小时。我们花了很多时间试图找到类路径问题,但我们所有的调整都没有帮助。对我们来说,修复是添加:

    -Djava.awt.headless=true
    

    到启动 JVM 的命令行。 This SO answer 为我们指明了正确的方向。

    在我们的案例中,我们没有在日志中看到任何与 sun/awt 相关的异常来为我们提供线索,但这个修复仍然有效。

    【讨论】:

    • 所以我尝试运行java -Djava.awt.headless=true com/suhail/main/CommandLineRunner,但它给出了同样的错误。
    • 刚刚仔细查看了您构建应用程序的方式。尝试运行mvn package,然后执行jar。您正在尝试使用单个类而不提供类路径。
    • 仍然出现同样的错误
    • 我做了mvn package 然后尝试以java -jar jarfile.jar 运行jar 是否还有什么我需要做的。
    猜你喜欢
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多