【问题标题】:Jasper Report syntax error on compilingJasper 编译时报告语法错误
【发布时间】:2019-01-22 06:37:55
【问题描述】:
  • Jasper 报告 - Netbeans 最新的 ireport 插件 (plugin for 7.4)
  • JDK - 1.8
  • Netbeans 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 编译器 jar 添加到类路径中,并将源代码也更改为 1.8,但仍然出现上述错误。

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

【问题讨论】:

    标签: java netbeans java-8 jasper-reports ireport


    【解决方案1】:

    我尝试将iReport使用的jtd编译器替换为新版本的jtd编译器(JasperReports 6.3使用)。 p>

    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 的更改可能会破坏编译机制。

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

    我看到的解决方案:

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

    更多信息:

    Use lambda expressions inside TextField expression in Jaspersoft Studio 6.3

    How to use lambda expression in jrxml file?

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      相关资源
      最近更新 更多