Jasper 编译时报告语法错误
Jasper Report syntax error on compiling
- Jasper 报告 - Netbeans 最新的 ireport 插件 (plugin for 7.4)
- JDK - 1.8
- Netbeans 8.2
我在 jrxml 文件中使用 java 8 个流。 Stream 函数在 jrxml 之外工作正常,当我编译报告时它给了我以下错误:
Compilation exceptions: com.jaspersoft.ireport.designer.compiler.ErrorsCollector@3155ed77
net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. Syntax error on token "-", -- expected
.sorted(java.util.Comparator.comparing(p -> p.getId())) //$JR_EXPR_ID=9$
^
2. Syntax error on token "-", -- expected
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus()) //$JR_EXPR_ID=9$
^
3. Syntax error on token "-", -- expected
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus()) //$JR_EXPR_ID=9$
^
4. Syntax error on token "-", -- expected
.filter(com.court.handler.FxUtilsHandler.distinctByKey(p -> p.getMemberLoanCode())) //$JR_EXPR_ID=9$
^
5. Syntax error on token "-", -- expected
.sorted(java.util.Comparator.comparing(p -> p.getId())) //$JR_EXPR_ID=9$
^
6. Syntax error on token "-", -- expected
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus()) //$JR_EXPR_ID=9$
^
7. Syntax error on token "-", -- expected
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus()) //$JR_EXPR_ID=9$
^
8. Syntax error on token "-", -- expected
.filter(com.court.handler.FxUtilsHandler.distinctByKey(p -> p.getMemberLoanCode())) //$JR_EXPR_ID=9$
^
9. Syntax error on token "-", -- expected
.sorted(java.util.Comparator.comparing(p -> p.getId())) //$JR_EXPR_ID=9$
^
10. Syntax error on token "-", -- expected
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus()) //$JR_EXPR_ID=9$
^
11. Syntax error on token "-", -- expected
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus()) //$JR_EXPR_ID=9$
^
12. Syntax error on token "-", -- expected
.filter(com.court.handler.FxUtilsHandler.distinctByKey(p -> p.getMemberLoanCode())) //$JR_EXPR_ID=9$
^
12 errors
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:204)
at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:512)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1443)
at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:68)
at org.openide.util.lookup.Lookups.executeWith(Lookups.java:303)
at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2058)
这是我的变量表达式:
<variableExpression><![CDATA[$F{memberLoans}.stream()
.sorted(java.util.Comparator.comparing(p -> p.getId()))
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus())
.filter(com.court.handler.FxUtilsHandler.distinctByKey(p -> p.getMemberLoanCode()))
.collect(java.util.stream.Collectors.toList())]]></variableExpression>
我已经将我的应用程序 jar 和最新的 jdt-compiler jar 添加到类路径并将源也更改为 1.8,但它仍然给我上述错误。
任何建议都会很有帮助。谢谢。
我尝试将 iReport 使用的 jtd 编译器 替换为新版本的 jtd 编译器[=74] =](由 JasperReports 6.3 使用)。
iReport 的最新版本是 5.6.0,它使用的是 JasperReports 5.6.0 幕后。
JasperReports 5.6 正在使用 jdt 3.1,您可以在 pom.xml 找到此依赖项:
<dependency>
<groupId>eclipse</groupId>
<artifactId>jdtcore</artifactId>
<version>3.1.0</version>
<scope>compile</scope>
</dependency>
这意味着 JasperReports API 使用的是不支持 的旧版本 jdt Java8。
例如,net.sf.jasperreports.engine.design.JRJdtCompiler class 正在使用 jdt 内核。这意味着 jdt API 的更改可以破坏编译机制。
尽管有这些事实,我还是继续我的实验,并将 jdt 替换为新版本:4.3.1(此版本由 JasperReports 使用6.3).这个版本允许我们在模板中使用 Java 8 语法。
我还在 iReport:
设置了属性
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.source=1.8
但是我在通过 iReport:
编译模板 (jrxml) 时遇到了错误(正如预期的那样)
java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getErrors()[Lorg/eclipse/jdt/core/compiler/IProblem;
at com.jaspersoft.ireport.designer.compiler.ExtendedJRJdtCompiler$CompilerRequestor.acceptResult(ExtendedJRJdtCompiler.java:96)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:480)
at net.sf.jasperreports.engine.design.JRJdtCompiler.compileUnits(JRJdtCompiler.java:167)
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:201)
at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:512)
这意味着我的尝试失败了,因为jdt API在新版本中被更改了。但是 JasperReports API 仍在使用 "old" 方法而不是新方法 jdt.jar.
我看到的解决方案:
- 停止使用不受支持的 IDE 并将其替换为 Jaspersoft Studio
- 不要在 IDE (iReport) 处使用编译,并尝试 compile/test 使用 Java代码.
更多信息:
更新JDK你的电脑(y)
barbecue-1.5-beta1 jar 没有编译所有 jdk !
- Jasper 报告 - Netbeans 最新的 ireport 插件 (plugin for 7.4)
- JDK - 1.8
- Netbeans 8.2
我在 jrxml 文件中使用 java 8 个流。 Stream 函数在 jrxml 之外工作正常,当我编译报告时它给了我以下错误:
Compilation exceptions: com.jaspersoft.ireport.designer.compiler.ErrorsCollector@3155ed77
net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. Syntax error on token "-", -- expected
.sorted(java.util.Comparator.comparing(p -> p.getId())) //$JR_EXPR_ID=9$
^
2. Syntax error on token "-", -- expected
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus()) //$JR_EXPR_ID=9$
^
3. Syntax error on token "-", -- expected
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus()) //$JR_EXPR_ID=9$
^
4. Syntax error on token "-", -- expected
.filter(com.court.handler.FxUtilsHandler.distinctByKey(p -> p.getMemberLoanCode())) //$JR_EXPR_ID=9$
^
5. Syntax error on token "-", -- expected
.sorted(java.util.Comparator.comparing(p -> p.getId())) //$JR_EXPR_ID=9$
^
6. Syntax error on token "-", -- expected
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus()) //$JR_EXPR_ID=9$
^
7. Syntax error on token "-", -- expected
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus()) //$JR_EXPR_ID=9$
^
8. Syntax error on token "-", -- expected
.filter(com.court.handler.FxUtilsHandler.distinctByKey(p -> p.getMemberLoanCode())) //$JR_EXPR_ID=9$
^
9. Syntax error on token "-", -- expected
.sorted(java.util.Comparator.comparing(p -> p.getId())) //$JR_EXPR_ID=9$
^
10. Syntax error on token "-", -- expected
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus()) //$JR_EXPR_ID=9$
^
11. Syntax error on token "-", -- expected
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus()) //$JR_EXPR_ID=9$
^
12. Syntax error on token "-", -- expected
.filter(com.court.handler.FxUtilsHandler.distinctByKey(p -> p.getMemberLoanCode())) //$JR_EXPR_ID=9$
^
12 errors
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:204)
at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:512)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1443)
at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:68)
at org.openide.util.lookup.Lookups.executeWith(Lookups.java:303)
at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2058)
这是我的变量表达式:
<variableExpression><![CDATA[$F{memberLoans}.stream()
.sorted(java.util.Comparator.comparing(p -> p.getId()))
.filter(p -> !p.isIsComplete()).filter(p -> p.isStatus())
.filter(com.court.handler.FxUtilsHandler.distinctByKey(p -> p.getMemberLoanCode()))
.collect(java.util.stream.Collectors.toList())]]></variableExpression>
我已经将我的应用程序 jar 和最新的 jdt-compiler jar 添加到类路径并将源也更改为 1.8,但它仍然给我上述错误。
任何建议都会很有帮助。谢谢。
我尝试将 iReport 使用的 jtd 编译器 替换为新版本的 jtd 编译器[=74] =](由 JasperReports 6.3 使用)。
iReport 的最新版本是 5.6.0,它使用的是 JasperReports 5.6.0 幕后。
JasperReports 5.6 正在使用 jdt 3.1,您可以在 pom.xml 找到此依赖项:
<dependency>
<groupId>eclipse</groupId>
<artifactId>jdtcore</artifactId>
<version>3.1.0</version>
<scope>compile</scope>
</dependency>
这意味着 JasperReports API 使用的是不支持 的旧版本 jdt Java8。
例如,net.sf.jasperreports.engine.design.JRJdtCompiler class 正在使用 jdt 内核。这意味着 jdt API 的更改可以破坏编译机制。
尽管有这些事实,我还是继续我的实验,并将 jdt 替换为新版本:4.3.1(此版本由 JasperReports 使用6.3).这个版本允许我们在模板中使用 Java 8 语法。
我还在 iReport:
设置了属性org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.source=1.8
但是我在通过 iReport:
编译模板 (jrxml) 时遇到了错误(正如预期的那样)java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getErrors()[Lorg/eclipse/jdt/core/compiler/IProblem;
at com.jaspersoft.ireport.designer.compiler.ExtendedJRJdtCompiler$CompilerRequestor.acceptResult(ExtendedJRJdtCompiler.java:96)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:480)
at net.sf.jasperreports.engine.design.JRJdtCompiler.compileUnits(JRJdtCompiler.java:167)
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:201)
at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:512)
这意味着我的尝试失败了,因为jdt API在新版本中被更改了。但是 JasperReports API 仍在使用 "old" 方法而不是新方法 jdt.jar.
我看到的解决方案:
- 停止使用不受支持的 IDE 并将其替换为 Jaspersoft Studio
- 不要在 IDE (iReport) 处使用编译,并尝试 compile/test 使用 Java代码.
更多信息:
更新JDK你的电脑(y) barbecue-1.5-beta1 jar 没有编译所有 jdk !