繁体   English   中英

Jasper 编译时报告语法错误

[英]Jasper Report syntax error on compiling

  • Jasper report - 用于 ireport 的 Netbeans 最新插件( 7.4 插件
  • JDK - 1.8
  • 网豆 8.2

我在 jrxml 文件中使用 java 8 流。 流函数在 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,但仍然出现上述错误。

图片_1

图片_2

任何建议都会非常有帮助。 谢谢你。

我试图取代JTD编译器对使用JTD编译器的新版本使用的iReport(由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正在使用不支持Java 8的旧版本jdt

例如, net.sf.jasperreports.engine.design.JRJdtCompiler类正在使用jdt核心。 这意味着jdt API 的变化会破坏编译机制。

尽管有这些事实,我继续我的实验并用新版本替换jdt4.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仍然使用“旧”方法而不是来自新jdt.jar的方法。

我看到的解决方案:

  1. 停止使用不受支持的IDE并将其替换为Jaspersoft Studio
  2. 不要在IDE ( iReport ) 中使用编译并尝试使用Java代码编译/测试报告。

更多信息:

在 Jaspersoft Studio 6.3 中的 TextField 表达式中使用 lambda 表达式

如何在 jrxml 文件中使用 lambda 表达式?

更新 JDK 您的计算机 (y) BBQ-1.5-beta1 jar 未编译所有 jdk!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM