问题poi jar文件java.lang.NoSuchMethodError

我在我的应用程序中使用poi-3.7.jar,而我正在生成一个Excel文件,我得到下面的exception。 我已经排除了我的项目中的所有poijar。 任何人可以帮助我吗?

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, eg 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的类Signature,如下所示:

 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-ooxml-schemas ,从下面poi-ooxmlpoi-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所以这个问题得到解决,我不再是exception。 谢谢