gpt4 book ai didi

java - net.sf.jasperreports.engine.JRRuntimeException : Function MONTH not found

转载 作者:行者123 更新时间:2023-12-02 12:21:12 25 4
gpt4 key购买 nike

我正在开发一个桌面应用程序,用于使用 Java Swing 和 Jasper Reports 生成报告。几天前,我遇到了一个问题,因为我的代码无法找到 Groovy 函数。我发现this answer问题得到了解决(请注意,我留下了评论),但是当我打包我的应用程序并尝试从控制台运行它时,我遇到了同样的问题。这是堆栈跟踪:

net.sf.jasperreports.engine.JRRuntimeException: Function MONTH not found.
at net.sf.jasperreports.compilers.GroovyEvaluator.functionCall(GroovyEvaluator.java:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:174)
at subReporteSummary_1502405767221_591326.methodMissing(calculator_subReporteSummary_1502405767221_591326:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaClassImpl.invokeMissingMethod(MetaClassImpl.java:939)
at groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:1262)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1215)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:69)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
at subReporteSummary_1502405767221_591326.evaluateEstimated(calculator_subReporteSummary_1502405767221_591326:336)
at net.sf.jasperreports.engine.fill.JREvaluator.evaluateEstimated(JREvaluator.java:342)
... 14 more

但是当我检查 jar 时,我能够找到 MONTH函数,位于 net.sf.jasperreports.functions.standard.DateTimeFunctions

@Function("MONTH")
@FunctionParameters({
@FunctionParameter("dateObject")})
public static Integer MONTH(Object dateObject){
return getCalendarFieldFromDate(dateObject,Calendar.MONTH)+1;
}

来自jasperreports-functions包位于我的类路径中并添加到包中,正如您可能通过我的 Maven 配置注意到的那样

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<repositories>
<!-- Jasper Reports repository to get japerreports-functions -->
<repository>
<id>jr-ce-releases</id>
<url>http://jaspersoft.artifactoryonline.com/jaspersoft/jr-ce-releases</url>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.4.0</version>
<!-- Exclusions to avoid some JasperReports certificates problems -->
<exclusions>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcmail-jdk14</artifactId>
</exclusion>
<exclusion>
<groupId>bouncycastle</groupId>
<artifactId>bcmail-jdk14</artifactId>
</exclusion>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bctsp-jdk14</artifactId>
</exclusion>
<exclusion>
<groupId>bouncycastle</groupId>
<artifactId>bcprov-jdk14</artifactId>
</exclusion>
</exclusions>
</dependency>

<!-- Groovy functions for Jasper Reports-->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-functions</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.12</version>
</dependency>

<!-- Driver needed to connect to the DB -->
<dependency>
<groupId>com.ibm.informix</groupId>
<artifactId>jdbc</artifactId>
<version>4.10.8.1</version>
</dependency>
</dependencies>

<build>
<plugins>
<!-- This is to include all my dependencies in my package (it works fine) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<mainClass>ar.edu.unt.gui.MainFrame</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>

<resources>
<resource>
<!-- I don't want to package the reports' source file -->
<directory>src/main/resources</directory>
<excludes>
<exclude>*.jrxml</exclude>
</excludes>
</resource>
</resources>
</build>
</project>

MONTH从子报表调用函数。我发现this post在 Jaspersoft 社区,但我的报告没有这样的 <returnValue>标签。这是主报表中声明子报表的片段:

<summary>
<band height="239" splitType="Stretch">
<subreport>
<reportElement x="0" y="0" width="469" height="200" uuid="2da4b923-ee34-4a6d-9a04-8d050a2feb0f"/>
<subreportParameter name="NRO_PAGINAS_PADRE">
<subreportParameterExpression><![CDATA[$V{PAGE_NUMBER}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA["subReporteSummary.jasper"]]></subreportExpression>
</subreport>
<textField evaluationTime="Auto">
<reportElement x="175" y="219" width="126" height="20" uuid="28a4ff7e-d6dd-47f5-a655-5e0ea7bec50b"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression><![CDATA["- Página " + $V{NRO_PAGINA_ACTUAL} + " de " + $V{PAGE_NUMBER} + " -"]]></textFieldExpression>
</textField>
</band>
</summary>

这是subReporteSummary.jrxml (西类牙语中的 summarySubreport)调用 MONTH 函数的片段:

<variable name="NOMBRE_MES" class="java.lang.String" resetType="None">
<variableExpression><![CDATA[MONTH($F{fechacancelacion}) == 1? "Enero" :
MONTH($F{fechacancelacion}) == 2? "Febrero" :
MONTH($F{fechacancelacion}) == 3? "Marzo" :
MONTH($F{fechacancelacion}) == 4? "Abril" :
MONTH($F{fechacancelacion}) == 5? "Mayo" :
MONTH($F{fechacancelacion}) == 6? "Junio" :
MONTH($F{fechacancelacion}) == 7? "Julio" :
MONTH($F{fechacancelacion}) == 8? "Agosto" :
MONTH($F{fechacancelacion}) == 9? "Septiembre" :
MONTH($F{fechacancelacion}) == 10? "Octubre" :
MONTH($F{fechacancelacion}) == 11? "Noviembre" : "Diciembre"]]></variableExpression>
<initialValueExpression><![CDATA[MONTH($F{fechacancelacion}) == 1? "Enero" :
MONTH($F{fechacancelacion}) == 2? "Febrero" :
MONTH($F{fechacancelacion}) == 3? "Marzo" :
MONTH($F{fechacancelacion}) == 4? "Abril" :
MONTH($F{fechacancelacion}) == 5? "Mayo" :
MONTH($F{fechacancelacion}) == 6? "Junio" :
MONTH($F{fechacancelacion}) == 7? "Julio" :
MONTH($F{fechacancelacion}) == 8? "Agosto" :
MONTH($F{fechacancelacion}) == 9? "Septiembre" :
MONTH($F{fechacancelacion}) == 10? "Octubre" :
MONTH($F{fechacancelacion}) == 11? "Noviembre" : "Diciembre"]]></initialValueExpression>
</variable>

简单地说:fechacancelacionjava.util.Date变量和表达式用于获取大写的月份名称(这是必需的),我无法使用 DATEFORMAT 获得该名称。函数,因为它只给我小写的名称。

但是回到问题并总结一下,我有MONTH函数在我的 JAR 中可用,当我从 IDE (Netbeans) 运行应用程序时,报告会编译并正确显示,但从控制台运行时出现错误 java -jar myapp-1.0.jar来自target文件夹。

如果您需要任何其他证据,请将其注释掉。任何帮助将不胜感激。预先感谢您的回答

最佳答案

如果您使用 Maven Shade 插件来打包您的 jar,则必须按照 here 的描述合并所有 jar 中的 jasperreports_extension.properties以便正确注册 JasperReports 扩展(例如函数)。

关于java - net.sf.jasperreports.engine.JRRuntimeException : Function MONTH not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com