使用Jasper Reports API 6.13.0并采用OpenJDK 11编译Jasper Reports时出错 [英] Error when compiling Jasper Reports using Jasper Reports API 6.13.0 with Adopt OpenJDK 11

查看:254
本文介绍了使用Jasper Reports API 6.13.0并采用OpenJDK 11编译Jasper Reports时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

we have a utility (CompileJasperReports.jar) that we use to compile all reports found in a folder

在Java 8中使用JasperReports 6.7 API时,该实用程序运行良好.电话是

When using JasperReports 6.7 API with Java 8 the utility runs fine. The call is

" C:\ Program Files \ Java \ jdk1.8.0_172 \ bin \ java" -jar CompileJasperReports.jar<包含.jrxml文件的文件夹中> < .jasper文件的外部文件夹>

"C:\Program Files\Java\jdk1.8.0_172\bin\java" -jar CompileJasperReports.jar <in-folder containing .jrxml files> <out-folder for .jasper files>

这些是CompileJasperReports.jar使用的jars

These are the jars that are used by the CompileJasperReports.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.

Now we are trying to migrate to JasperReports 6.13.0 API and Java 11.

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

The utility is compiled with Java 11 and the call to it is

"C:\ Program Files \ AdoptOpenJDK \ jdk-11.0.8.10-hotspot \ bin \ java" -jar --add-打开java.xml/com.sun.org.apache.xerces.internal.util = ALL-UNNAMED CompileJasperReports.jar<包含.jrxml文件的文件夹中> < .jasper文件的外部文件夹>

"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 <in-folder containing .jrxml files> <out-folder for .jasper files>

这些是CompileJasperReports.jar使用的jars

These are the jars that are used by the CompileJasperReports.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

大多数报告都可以毫无问题地编译,但是对于某些情况,会发生以下错误:

Most of the reports are compiled without problems, but for some the following error occurs:

将master_report.jrxml编译为master_report.jasper ...

Compiling master_report.jrxml to 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)
    

该实用程序的主要代码是

The main code of the utility is

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();
        }
    }       
}

任何提示都非常受欢迎.

Any hints are highly welcome.

推荐答案

这是JasperReports 6.13.0中的错误.

It's a bug in JasperReports 6.13.0.

解决该错误的一种方法是在应用程序中包含JDT/ECJ编译器jar. JasperReports 6.13.0将ECJ 3.21.0列为依赖项,您可以在此处.

One way to workaround the bug is to include a JDT/ECJ compiler jar in your application. JasperReports 6.13.0 lists ECJ 3.21.0 as dependency, you can get it here.

另一种解决方法是,如果应用程序中包含以下属性,请在jasperreports.properties中添加以下属性:

An alternative workaround is to add the following property to jasperreports.properties, if you have one in your application:

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

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

You can also set the property programmatically if you don't have/want a jasperreports.properties file:

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

这篇关于使用Jasper Reports API 6.13.0并采用OpenJDK 11编译Jasper Reports时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆