【问题标题】:Error when compiling Jasper Reports using Jasper Reports API 6.13.0 with Adopt OpenJDK 11使用 Jasper Reports API 6.13.0 和 Adopt OpenJDK 11 编译 Jasper 报告时出错
【发布时间】:2020-07-24 07:55:40
【问题描述】:

我们有一个实用程序 (CompileJasperReports.jar),用于编译文件夹中的所有报告

将 JasperReports 6.7 API 与 Java 8 一起使用时,该实用程序运行良好。电话是

"C:\Program Files\Java\jdk1.8.0_172\bin\java" -jar CompileJasperReports.jar

这些是 CompileJasperReports.jar 使用的 jar

  • jasperreports-6.7.0.jar
  • commons-beanutils-1.9.3.jar
  • commons-collections-3.2.2.jar
  • commons-digester-2.1.jar
  • commons-logging-1.2.jar

现在我们正在尝试迁移到 JasperReports 6.13.0 API 和 Java 11。

该实用程序是使用 Java 11 编译的,对其的调用是

"C:\Program Files\AdoptOpenJDK\jdk-11.0.8.10-hotspot\bin\java" -jar --add-opens java.xml/com.sun.org.apache.xerces.internal.util=ALL -UNNAMED CompileJasperReports.jar

这些是 CompileJasperReports.jar 使用的 jar

  • jasperreports-6.13.0.jar
  • commons-beanutils-1.9.4.jar
  • commons-collections4-4.4.jar
  • commons-digester-2.1.jar
  • commons-logging-1.2.jar

大部分报告编译都没有问题,但有一些会出现以下错误:

将master_report.jrxml编译成master_report.jasper...

java.lang.NullPointerException
at net.sf.jasperreports.engine.design.JRAbstractCompiler.deleteSourceFiles(JRAbstractCompiler.java:407)
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:281)
at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:358)
at net.sf.jasperreports.engine.JasperCompileManager.compileToFile(JasperCompileManager.java:274)
at net.sf.jasperreports.engine.JasperCompileManager.compileToFile(JasperCompileManager.java:256)
at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:555)
at com.ietsol.enterprise.CompileJasperReports.main(CompileJasperReports.java:24)
    

该实用程序的主要代码是

private static final String defExtension = ".jrxml";
private static final String compExtension = ".jasper";

public static void main(String[] args) {
    if (!checkArguments(args)) 
        return;
    
    File inputDir = new File(args[0]);
    File[] files = inputDir.listFiles((dir, name) -> name.endsWith(defExtension));
    for (File reportDef : files) {
        String defFileName = reportDef.getName();
        String compFileName = defFileName.replace(defExtension, compExtension);
        System.out.println("Compiling " + defFileName + " to " + compFileName + "...");
        try {
            JasperCompileManager.compileReportToFile(args[0] + File.separator + defFileName, args[1] + File.separator + compFileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }       
}

非常欢迎任何提示。

【问题讨论】:

    标签: java jasper-reports openjdk-11 adoptopenjdk


    【解决方案1】:

    这是 JasperReports 6.13.0 中的一个错误。

    解决该错误的一种方法是在您的应用程序中包含一个 JDT/ECJ 编译器 jar。 JasperReports 6.13.0 将 ECJ 3.21.0 列为依赖项,您可以通过 here 获取它。

    另一种解决方法是将以下属性添加到 jasperreports.properties(如果您的应用程序中有一个):

    net.sf.jasperreports.legacy.compiler.source.included.parameters=REPORT_PARAMETERS_MAP
    

    如果您没有/想要一个 jasperreports.properties 文件,您也可以通过编程方式设置属性:

        DefaultJasperReportsContext.getInstance().setProperty(
                ReportSourceCompilation.PROPERTY_LEGACY_SOURCE_INCLUDED_PARAMETERS, 
                JRParameter.REPORT_PARAMETERS_MAP);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      相关资源
      最近更新 更多