如何让 Apache POI 5.2.0 在 Jira 9.11.2 中工作?
pom.xml:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version> <!-- Replace with the actual version you are using -->
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>SparseBitSet</artifactId>
<version>1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-lite</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>5.0.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.12.2</version>
<scope>compile</scope>
</dependency>
以下是错误消息:
2023-11-24 06:17:54,540+0000 http-nio-8080-exec-12 url: /internal-error ERROR [c.a.j.web.servlet.InternalServerErrorServlet] {errorId=03676b16-0b98-4024-9c29-e3519eb3dff2, interpretedMsg=, cause=java.lang.ExceptionInInitializerError, stacktrace=java.lang.ExceptionInInitializerError
at org.apache.poi.ooxml.util.DocumentHelper.newDocumentBuilder(DocumentHelper.java:47) [?:?]
at org.apache.poi.ooxml.util.DocumentHelper.<clinit>(DocumentHelper.java:36) [?:?]
at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.save(ContentTypeManager.java:429) [?:?]
at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:563) [?:?]
at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1490) [?:?]
at org.apache.poi.ooxml.POIXMLDocument.write(POIXMLDocument.java:227) [?:?]
at org.apache.poi.xssf.streaming.SXSSFWorkbook.write(SXSSFWorkbook.java:968) [?:?]
at fi.i4ware.plugin.timesheet.ExportMySelectedIssueWithWorklogCommentsExcelServlet.doGet(ExportMySelectedIssueWithWorklogCommentsExcelServlet.java:494) [?:?]
Caused by: java.lang.ClassCastException: class org.apache.xerces.jaxp.DocumentBuilderFactoryImpl cannot be cast to class javax.xml.parsers.DocumentBuilderFactory (org.apache.xerces.jaxp.DocumentBuilderFactoryImpl is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @3faf2e7d; javax.xml.parsers.DocumentBuilderFactory is in unnamed module of loader org.apache.felix.framework.BundleWiringImpl$BundleClassLoader @40ca2838)
at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source) [?:?]
at org.apache.poi.util.XMLHelper.getDocumentBuilderFactory(XMLHelper.java:107) [?:?]
at org.apache.poi.util.XMLHelper.<clinit>(XMLHelper.java:85) [?:?]
... 282 more
, referer=https://jira.i4ware.fi/secure/TimesheetForJiraDashboardAction.jspa, servletErrorMessage=}
第 494 行如下:
wb.write(out);
pw.print( out );
出去就在这里
PrintWriter pw = new PrintWriter( new OutputStreamWriter( resp.getOutputStream() ) );
OutputStream out = resp.getOutputStream();
我从 ChatGPT 获得信息,这个问题必须像下面这样修复,但我不知道在 pom.xml 中写更多内容:
<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-api</artifactId>
<version>${jira.version}</version>
</dependency>
以及如何在实现此功能后获得构建成功以及还需要什么:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<configuration>
<relocations>
<relocation>
<pattern>org.apache.poi</pattern>
<shadedPattern>fi.i4ware.plugin.timesheet.tfj.org.apache.poi</shadedPattern>
</relocation>
<!-- Add relocations for other conflicting packages -->
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
不是
添加一行时
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
然后我收到错误:
2023-11-24 15:00:14,914+0000 http-nio-8080-exec-6 url: /internal-error ERROR [c.a.j.web.servlet.InternalServerErrorServlet] {errorId=ad959c71-6ae3-4c80-8929-13c11e7856d7, interpretedMsg=, cause=java.lang.ClassCastException: class org.apache.xerces.jaxp.DocumentBuilderFactoryImpl cannot be cast to class javax.xml.parsers.DocumentBuilderFactory (org.apache.xerces.jaxp.DocumentBuilderFactoryImpl is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @1643d68f; javax.xml.parsers.DocumentBuilderFactory is in unnamed module of loader org.apache.felix.framework.BundleWiringImpl$BundleClassLoader @70819ac9), stacktrace=java.lang.ClassCastException: class org.apache.xerces.jaxp.DocumentBuilderFactoryImpl cannot be cast to class javax.xml.parsers.DocumentBuilderFactory (org.apache.xerces.jaxp.DocumentBuilderFactoryImpl is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @1643d68f; javax.xml.parsers.DocumentBuilderFactory is in unnamed module of loader org.apache.felix.framework.BundleWiringImpl$BundleClassLoader @70819ac9)
at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source) [?:?]
at fi.i4ware.plugin.timesheet.ExportMySelectedIssueWithWorklogCommentsExcelServlet.doGet(ExportMySelectedIssueWithWorklogCommentsExcelServlet.java:173) [?:?]
这看起来像是库之间的依赖冲突。 修复步骤:
<dependency>
<groupId>com.baeldung</groupId>
<artifactId>project-a</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
这篇文章也可以提供帮助。