poi jar 文件问题 java.lang.NoSuchMethodError

Issue with poi jar file java.lang.NoSuchMethodError

我在我的应用程序中使用 poi-3.7.jar,同时生成 excel 文件,但出现以下异常。我已经从我的项目中排除了所有的 poi 罐子。任何人都可以帮助我吗?

java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCell.setCellValue(Lorg/apache/poi/hssf/usermodel/HSSFRichTextString;)V
    net.sf.jxls.transformer.CellTransformer.setCellValue(CellTransformer.java:112)
    net.sf.jxls.transformer.CellTransformer.transform(CellTransformer.java:99)
    net.sf.jxls.transformer.SimpleRowTransformer.transform(SimpleRowTransformer.java:51)
    net.sf.jxls.transformer.CollectionRowTransformer.transform(CollectionRowTransformer.java:65)
    net.sf.jxls.transformer.SheetTransformer.transformSheet(SheetTransformer.java:89)
    net.sf.jxls.transformer.XLSTransformer.transformWorkbook(XLSTransformer.java:238)
    net.sf.jxls.transformer.XLSTransformer.transformXLS(XLSTransformer.java:217)
    org.efs.openreports.engine.JXLSReportEngine.generateReport(JXLSReportEngine.java:97)
    org.efs.openreports.actions.ReportRunAction.execute(ReportRunAction.java:163)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:606)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
    com.vzone.global.interceptor.WorkspaceInterceptor.intercept(WorkspaceInterceptor.java:31)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.efs.openreports.interceptors.SecurityInterceptor.intercept(SecurityInterceptor.java:58)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.efs.openreports.interceptors.BreadcrumbsInterceptor.intercept(BreadcrumbsInterceptor.java:54)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    com.opensymphony.xwork2.ActionChainResult.execute(ActionChainResult.java:222)
    com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:362)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266)

POM.xml :

<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">
    <modelVersion>4.0.0</modelVersion>
    <groupId>vzone</groupId>
    <artifactId>vzone</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>vzone</name>

    <repositories>
        <repository>
            <id>Maven2</id>
            <url>http://repo1.maven.org/maven2/</url>
        </repository>
        <repository>
            <id>JBoss repository</id>
            <url>http://repository.jboss.org/nexus/content/groups/public/</url>
        </repository>
         <repository>
    <id>pentaho-releases</id>
    <url>http://repository.pentaho.org/artifactory/repo/</url>
  </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- Struts 2 -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.1.8</version>
        </dependency>
        <!-- Struts 2 + Spring plugins -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.1.8</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring-web</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-beans</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-context</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-core</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-json-plugin</artifactId>
            <version>2.1.8</version>
        </dependency>

        <!-- database driver -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.23</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20090211</version>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>sqljdbc4</artifactId>
            <version>4.0</version>
        </dependency>

        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.2.2</version>
        </dependency>

        <!-- Spring framework -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>3.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>3.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.2.8.RELEASE</version>
        </dependency>
            <!-- QuartzJobBean in spring-context-support.jar -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>3.2.8.RELEASE</version>
    </dependency>

    <!-- Spring + Quartz need transaction -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>3.2.8.RELEASE</version>
    </dependency>

    <!-- Quartz framework -->
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>1.8.6</version>
    </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.9</version>
        </dependency>
        <!-- ORM integration, e.g Hibernate -->
        <!-- Hibernate core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate</artifactId>
            <version>3.2.7.ga</version>
            <exclusions>
                <exclusion>
                    <artifactId>asm</artifactId>
                    <groupId>asm</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>3.3.0.GA</version>
        </dependency>

        <dependency>
            <groupId>asm</groupId>
            <artifactId>asm</artifactId>
            <version>3.3.1</version>
        </dependency>
        <!-- Hibernate core library dependency start -->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>


        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>

        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2</version>
            <exclusions>
                <exclusion>
                    <artifactId>asm</artifactId>
                    <groupId>asm</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- Hibernate core library dependency end -->

        <!-- Hibernate query library dependency start -->
        <dependency>
            <groupId>antlr</groupId>
            <artifactId>antlr</artifactId>
            <version>2.7.7</version>
        </dependency>
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.12.1.GA</version>
        </dependency>
        <!-- Hibernate query library dependency end -->
        <dependency>
            <groupId>com.datasift.client</groupId>
            <artifactId>datasift-java</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.9</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.9</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>commons-threadpool</groupId>
            <artifactId>commons-threadpool</artifactId>
            <version>20030513.073905</version>
        </dependency>

        <dependency>
      <groupId>displaytag</groupId>
      <artifactId>displaytag</artifactId>
      <version>1.2</version>
      <exclusions>
        <exclusion>
            <artifactId>itext</artifactId>
            <groupId>com.lowagie</groupId>
        </exclusion>
      </exclusions>
        </dependency>

 <dependency>
      <groupId>displaytag</groupId>
      <artifactId>displaytag-export-poi</artifactId>
      <version>1.2</version>
      <exclusions>
        <exclusion>
            <artifactId>poi</artifactId>
            <groupId>org.apache.poi</groupId>
        </exclusion>
      </exclusions>
 </dependency>

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.15</version>
</dependency>

<dependency>
  <groupId>pentaho</groupId>
  <artifactId>mondrian</artifactId>
  <version>3.0.3</version>
</dependency>
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>4.5.1</version>
    <exclusions>
        <exclusion>
            <artifactId>jcommon</artifactId>
            <groupId>jfree</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>net.sourceforge.jexcelapi</groupId>
    <artifactId>jxl</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>jfree</groupId>
    <artifactId>jfreereport</artifactId>
    <version>0.8.6</version>
    <exclusions>
        <exclusion>
            <artifactId>jcommon</artifactId>
            <groupId>jfree</groupId>
        </exclusion>
        <exclusion>
            <artifactId>jcommon-xml</artifactId>
            <groupId>jfree</groupId>
        </exclusion>
        <exclusion>
            <artifactId>pixie</artifactId>
            <groupId>jfree</groupId>
        </exclusion>
        <exclusion>
            <artifactId>gnujaxp</artifactId>
            <groupId>gnujaxp</groupId>
        </exclusion>
        <exclusion>
            <artifactId>poi</artifactId>
            <groupId>poi</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.jfree</groupId>
    <artifactId>jcommon</artifactId>
    <version>1.0.17</version>
</dependency>

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity</artifactId>
    <version>1.7</version>
</dependency>
<dependency>
    <groupId>org.apache.xbean</groupId>
    <artifactId>xbean-spring-v2</artifactId>
    <version>2.8</version>
    <exclusions>
        <exclusion>
            <artifactId>spring</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>net.sf.jxls</groupId>
    <artifactId>jxls-core</artifactId>
    <version>0.9.8</version>

    <exclusions>
        <exclusion>
            <artifactId>poi</artifactId>
            <groupId>org.apache.poi</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.eclipse.birt.runtime</groupId>
    <artifactId>org.eclipse.birt.runtime</artifactId>
    <version>3.7.2.v20120214-1408</version>
</dependency>
<!--  
<dependency>
    <groupId>org.ow2.orchestra.eclipse.birt</groupId>
    <artifactId>org.ow2.orchestra.eclipse.birt.report.engine</artifactId>
    <version>3.7.0</version>
    <exclusions>
        <exclusion>
            <artifactId>xercesImpl</artifactId>
            <groupId>xerces</groupId>
        </exclusion>
        </exclusions>
</dependency>-->
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<!-- 
<dependency>
    <groupId>xerces</groupId>
    <artifactId>xerces</artifactId>
    <version>2.4.0</version>
    <exclusions>
        <exclusion>
            <artifactId>xercesImpl</artifactId>
            <groupId>xerces</groupId>
        </exclusion>
    </exclusions>
</dependency>
 -->
<dependency>
    <groupId>org.codehaus.xfire</groupId>
    <artifactId>xfire-spring</artifactId>
    <version>1.2.1</version>
    <exclusions>
        <exclusion>
            <artifactId>spring</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
  <groupId>eigenbase</groupId>
  <artifactId>eigenbase-xom</artifactId>
  <version>1.3.3</version>
</dependency>
<dependency>
  <groupId>com.tonbeller</groupId>
  <artifactId>jpivot</artifactId>
  <version>1.8.0-111228</version>
</dependency>
<dependency>
  <groupId>com.tonbeller</groupId>
  <artifactId>wcf</artifactId>
  <version>1.8.0-130820</version>
</dependency>
<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7</version>
</dependency>
<dependency>
      <groupId>com.tonbeller</groupId>
      <artifactId>tbutils-wcf</artifactId>
      <version>1.8.0-070305</version>
      <scope>compile</scope>
    </dependency>
<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>fop</artifactId>
    <version>0.93</version>
    <exclusions>
        <exclusion>
            <artifactId>js</artifactId>
            <groupId>rhino</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-fonts</artifactId>
    <version>4.0.0</version>
</dependency>
    </dependencies>

    <build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <warSourceDirectory>web</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

我运行下面的代码。

public static void main(String args[]) {
        ClassLoader classloader =
                   org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
                URL res = classloader.getResource(
                         "org/apache/poi/poifs/filesystem/POIFSFileSystem.class");
                String path = res.getPath();
                System.out.println("Core POI came from " + path);
    }

输出是: .m2/repository/org/apache/poi/poi/3.7/poi-3.7.jar!/org/apache/poi/poifs/filesystem/POIFSFileSystem.class

我认为如果你想捆绑 POI-3.7,你需要更新 jxls 的版本。

查看 POI-3.7 的源代码有一个方法:

public void setCellValue(RichTextString value)
{
     HSSFRichTextString hvalue = (HSSFRichTextString) value; 
     ....
}

而不是:

public void setCellValue(HSSFRichTextString value)
{

}

后者似乎在 POI-3.2 中,jxls 依赖于它并且是针对它编译的,但在 POI-3.7 中没有。

我注意到下面的答案,但是查看 POI-3.2 中 HSSFRichTextString 的 class 签名如下:

public class org.apache.poi.hssf.usermodel.HSSFRichTextString implements java.lang.Comparable {

}

即。 实现 RichTextString(它在 POI-3.7 中实现)。

看来 POI-3.7 不向后兼容 POI-3.2。

PrimeFace 库报告了类似的问题:

https://code.google.com/p/primefaces/issues/detail?id=1148

我从 pom 中删除了依赖项 poi 3.7,并从 jasperreports 中排除了 poi-ooxml-schemaspoi-ooxml,如下所示。

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>4.5.1</version>
    <exclusions>
        <exclusion>
            <artifactId>jcommon</artifactId>
            <groupId>jfree</groupId>
        </exclusion>
        <exclusion>
            <artifactId>poi-ooxml-schemas</artifactId>
            <groupId>org.apache.poi</groupId>
        </exclusion>
        <exclusion>
            <artifactId>poi-ooxml</artifactId>
            <groupId>org.apache.poi</groupId>
        </exclusion>
    </exclusions>
</dependency>

并添加了依赖项 poi-3.2-FINAL.jar

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.2-FINAL</version>
</dependency>

pom.xml 所以这个问题得到解决,我不再遇到异常。谢谢

更新 jars 'poi-3.11.jar' 和 'jxls-reader-1.0.6.jar'(正在处理 jdk1.8+)

    <dependency>
        <groupId>net.sf.jxls</groupId>
        <artifactId>jxls-core</artifactId>
        <version>1.0.6</version>
    </dependency>
    <dependency>
        <groupId>net.sf.jxls</groupId>
        <artifactId>jxls-reader</artifactId>
        <version>1.0.6</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>ooxml-schemas</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.8</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.11</version>
    </dependency>

请将apache poi jar版本升级到4.1.2。我正在使用 JasperReports 6.13.0 版本,这已为我解决。

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>