Java 将docx4j与JIRA插件集成时出现问题
我一直在尝试将docx4j与一个定制的JIRA插件集成在一起,我过得很开心。第一种方法是增加:Java 将docx4j与JIRA插件集成时出现问题,java,maven,jira,docx4j,jira-plugin,Java,Maven,Jira,Docx4j,Jira Plugin,我一直在尝试将docx4j与一个定制的JIRA插件集成在一起,我过得很开心。第一种方法是增加: org.docx4j docx4j 3.3.2 到pom.xml文件。该插件构建得很好,但(通过UPM)部署在禁用状态,并就缺少的功能发出警告。我检查了日志,基本错误似乎是: 原因:org.osgi.framework.BundleException:bundle[233]中未解析的约束:无法解析233.0:缺少需求[233.0]osgi.willing.package;(osgi.willing
org.docx4j
docx4j
3.3.2
到pom.xml
文件。该插件构建得很好,但(通过UPM)部署在禁用状态,并就缺少的功能发出警告。我检查了日志,基本错误似乎是:
原因:org.osgi.framework.BundleException:bundle[233]中未解析的约束:无法解析233.0:缺少需求[233.0]osgi.willing.package;(osgi.willing.package=com.google.appengine.api.images)
位于org.apache.felix.framework.felix.resolveBundleRevision(felix.java:3974)
位于org.apache.felix.framework.felix.startBundle(felix.java:2037)
位于org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)
位于org.apache.felix.framework.BundleImpl.start(BundleImpl.java:942)
位于com.atlassian.plugin.osgi.factory.OsgiPlugin.enableInternal(OsgiPlugin.java:400)
这导致了在pom.xml
的说明
部分的导入包
中添加排除,以修复未解决的约束。我最终做到了这一点,然后还将依赖关系更改为:
org.docx4j
docx4j
3.3.2
*
*
这导致插件成功部署,但无法在代码中实际使用docx4j而不会出错。这就是我现在的处境
我的问题是,有没有人有将docx4j与JIRA插件集成的经验,或者知道如何解决这些问题
我正在使用docx4j版本3.3.2和JIRA 7.1.7。最后,是的
<dependencies>
<dependency>
<groupId>com.googlecode.jaxb-namespaceprefixmapper-interfaces</groupId>
<artifactId>JAXBNamespacePrefixMapper</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>6.1.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.woodstox</groupId>
<artifactId>woodstox-core</artifactId>
<version>5.0.2</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
<!--that provided REALLY matters-->
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.1.3</version>
<scope>provided</scope>
<!--along with that-->
</dependency>
</dependencies>
另外(现在不知道这是否重要,很肯定不是),Docx4jJAR也被添加到JIRA的/lib目录中。问题是docx4j和JIRA的内部javax.xml之间存在冲突——我已经尝试了新的纯JIRA插件,它只包含docx4j的功能——只管理绝对必需的依赖项
当然,对于最初的答案来说已经太晚了,但我希望,这可能会对其他人有所帮助。如果您只更改POM而不更改其他内容(即没有代码更改?),那么会发生此错误吗?在POM.xml中,找到JIRA/Maven配置部分(在
com.atlassian.Maven.plugins Maven JIRA plugin…
),并添加一个新的配置项:false
。之后,删除目标
目录,重建并重新加载插件。它有用吗?顺便说一句,在dep上放置一个显式的compile
,这不会有什么坏处,即使这是默认设置。我尝试添加
标记,但仍然导致部署错误。如果POM被更改并且代码不存在,部署错误仍然会发生。奇怪的是,仅仅更改POM就会产生这种影响,因为OSGi导入错误通常不应该依赖于它作为库打包的内容。你能:1-nuketargetdir,从pom中删除dep,构建jar并保存一个副本。2-添加回dep,重复前面的所有步骤,构建另一个jar。在那之后,你能提取罐子并区分里面的东西吗?您应该在META-INF/lib中看到一些新的JAR,但在更改方面没有太多其他内容。
<!-- Add package import here -->
<Import-Package>
org.springframework.osgi.*;version="0";resolution:=optional,
org.eclipse.gemini.blueprint.*;resolution:="optional",
org.docx4j*;resolution:="required",
javax.ws.rs*;resolution:="required",
javax.xml.bind*;resolution:="required",
*;version="0";resolution:="optional"
</Import-Package>
ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
try{
//...different docx4j things
}finally{
Thread.currentThread().setContextClassLoader(currentClassLoader);
}