Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将docx4j与JIRA插件集成时出现问题_Java_Maven_Jira_Docx4j_Jira Plugin - Fatal编程技术网

Java 将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

我一直在尝试将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.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);
}