将 docx4j 与 JIRA 插件集成时遇到问题
Trouble integrating docx4j with a JIRA plugin
我一直在尝试将 docx4j 与自定义 JIRA 插件集成,但我玩得很开心。第一种方法是添加:
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>3.3.2</version>
</dependency>
到 pom.xml
文件。该插件构建良好,但在禁用状态下部署(通过 UPM)并发出有关缺少功能的警告。我检查了日志,基本错误似乎是:
Caused by: org.osgi.framework.BundleException: Unresolved constraint in bundle <project_bundle> [233]: Unable to resolve 233.0: missing requirement [233.0] osgi.wiring.package; (osgi.wiring.package=com.google.appengine.api.images)
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3974)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2037)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:942)
at com.atlassian.plugin.osgi.factory.OsgiPlugin.enableInternal(OsgiPlugin.java:400)
这导致在 pom.xml
的 instructions
部分向 Import-Package
添加排除项以修复未解决的约束。我最终走到了尽头,然后也将依赖项更改为:
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>3.3.2</version>
<exclusions>
<exclusion>
<artifactId>*</artifactId>
<groupId>*</groupId>
</exclusion>
</exclusions>
</dependency>
这导致插件成功部署,但无法在代码中实际使用 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>
和import-packages:
<!-- 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);
}
此外(现在不知道它是否重要,很确定它不是),docx4j jar 也被添加到 JIRA 的 /lib 目录中。问题是 docx4j 和 JIRA 的内部冲突 javax.xml - 我尝试了新的纯 JIRA 插件,只包含 docx4j 的功能 - 只管理绝对需要的依赖关系
对于原始答案来说当然为时已晚,但我希望这可以帮助其他人。
我一直在尝试将 docx4j 与自定义 JIRA 插件集成,但我玩得很开心。第一种方法是添加:
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>3.3.2</version>
</dependency>
到 pom.xml
文件。该插件构建良好,但在禁用状态下部署(通过 UPM)并发出有关缺少功能的警告。我检查了日志,基本错误似乎是:
Caused by: org.osgi.framework.BundleException: Unresolved constraint in bundle <project_bundle> [233]: Unable to resolve 233.0: missing requirement [233.0] osgi.wiring.package; (osgi.wiring.package=com.google.appengine.api.images)
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3974)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2037)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:942)
at com.atlassian.plugin.osgi.factory.OsgiPlugin.enableInternal(OsgiPlugin.java:400)
这导致在 pom.xml
的 instructions
部分向 Import-Package
添加排除项以修复未解决的约束。我最终走到了尽头,然后也将依赖项更改为:
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>3.3.2</version>
<exclusions>
<exclusion>
<artifactId>*</artifactId>
<groupId>*</groupId>
</exclusion>
</exclusions>
</dependency>
这导致插件成功部署,但无法在代码中实际使用 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>
和import-packages:
<!-- 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);
}
此外(现在不知道它是否重要,很确定它不是),docx4j jar 也被添加到 JIRA 的 /lib 目录中。问题是 docx4j 和 JIRA 的内部冲突 javax.xml - 我尝试了新的纯 JIRA 插件,只包含 docx4j 的功能 - 只管理绝对需要的依赖关系
对于原始答案来说当然为时已晚,但我希望这可以帮助其他人。