Spring 使用 JasperReport 启动应用程序中的 FileNotFoundException

FileNotFoundException in a Spring Boot application with JasperReport

在我的 Spring 引导 webapp 中,我正在尝试实现一些后端功能以使用 JasperReports.

生成 PDF 文件

我的文件结构如下所示:

应用程序在 运行ning 时,可以毫无问题地查看 application-*.propertiesstatic 文件夹中的任何文件。

我写了一段代码来生成报告并显示在 JasperViewer:

    JasperPrint print = null;
    try {
        JasperCompileManager.compileReportToFile("invoices/invoice.jrxml");
        print = JasperFillManager.fillReport("invoices/invoice.jasper", new HashMap<>());
        JasperViewer jasperViewer = new JasperViewer(print);
        jasperViewer.setVisible(true);
    } catch (JRException e) {
        e.printStackTrace();
    }

但是当我尝试 运行 应用程序时,我得到的是:

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: invoices/invoice.jrxml (No such file or directory)

您正在使用 java.io 文件 api 操作从类路径加载资源。当应用程序在 IDE 的开发过程中解压缩时它可以工作,但当应用程序被打包到 JAR 时会失败,因此 FileNotFoundException

更改您的代码以使用 InputStream 从类路径加载资源,例如通过使用 JasperCompileManager.compileReport():.

try (InputStream in = getClass().getResourceAsStream("/invoices/invoice.jrxml")) {
    JasperCompileManager.compileReport(in);
    ...
}