Java 使用Jasper Reports API 6.13.0和OpenJDK 11编译Jasper报告时出错
我们有一个实用工具(CompileJasperReports.jar),用于编译在文件夹中找到的所有报告 在Java8中使用JasperReports6.7API时,该实用程序运行良好。电话是 “C:\Program Files\Java\jdk1.8.0\u 172\bin\Java”-jar compilejsperreports.jar 这些是CompileJasperReports.jar使用的jarJava 使用Jasper Reports API 6.13.0和OpenJDK 11编译Jasper报告时出错,java,jasper-reports,openjdk-11,adoptopenjdk,Java,Jasper Reports,Openjdk 11,Adoptopenjdk,我们有一个实用工具(CompileJasperReports.jar),用于编译在文件夹中找到的所有报告 在Java8中使用JasperReports6.7API时,该实用程序运行良好。电话是 “C:\Program Files\Java\jdk1.8.0\u 172\bin\Java”-jar compilejsperreports.jar 这些是CompileJasperReports.jar使用的jar jasperreports-6.7.0.jar commons-beanutils-
- 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.jar
- commons-beanutils-1.9.4.jar
- commons-collections4-4.4.jar
- commons-digester-2.1.jar
- commons-logging-1.2.jar
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();
}
}
}
欢迎提供任何提示。这是JasperReports 6.13.0中的一个bug 解决此错误的一种方法是在应用程序中包含JDT/ECJ编译器jar。JasperReports 6.13.0将ECJ 3.21.0列为依赖项,您可以得到它 另一种解决方法是将以下属性添加到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);
工作起来很有魅力。非常感谢你!