如何在JIRA插件中包含JIRA REST Java Client?

时间:2013-07-26 12:37:44

标签: jira jira-plugin jira-rest-java-api

我是JIRA插件开发的新手,所以我的问题听起来可能太容易了,但请耐心一点,仔细阅读,因为我已经尝试了很多东西,在互联网上找到了,但没有一个能够工作。这就是为什么我在这里问它,作为我最后的希望。

我想在我的JIRA插件中使用JIRA REST Java Client。直接instructions建议将以下内容添加到我的pom.xml中,一切都应该有效:

<dependency>
    <groupId>com.atlassian.jira</groupId>
    <artifactId>jira-rest-java-client</artifactId>
    <version>1.1-m02</version>
</dependency>

但当然,它没有,因为在Eclipse中,atlas-mvn eclipse:eclipse之后一切都很好(没有任何错误/警告),但是当我使用atlas-runatlas-debug运行JIRA时,一旦我尝试访问该行:

JerseyJiraRestClientFactory f = new JerseyJiraRestClientFactory();

我收到例外java.lang.NoClassDefFoundError: com/atlassian/jira/rest/client/internal/jersey/JerseyJiraRestClientFactory

我再说一遍,在Eclipse中,一切都显示正常,没有一个警告/错误标记,但在运行时,我得到了异常。

推荐给我的解决方案是将all the needed dependencies添加到我的pom.xml中,但是由于有很多例外,我甚至无法正常启动JIRA(如果需要)。

所以,简单的问题是如何正确地做到这一点?更好的是,有没有人提供pom.xml文件+ src /文件夹的任何简单的WORKING示例,所以我可以弄清楚我在哪里错了?

非常感谢。

2 个答案:

答案 0 :(得分:4)

jrjc-example-client repository中所述,当前版本的JRJC是2.0,并且在提供的pom.xml文件中提到了一件重要的事情:

  

“JIRA已经提供了许多JRJC需要的依赖项。我们需要将它们从JRJC依赖项中排除,因为我们不想将它们打包在插件中。”

所以,解决方案是从JRJC依赖项中排除这些内容:

<dependency>
        <groupId>com.atlassian.jira</groupId>
        <artifactId>jira-rest-java-client</artifactId>
        <version>2.0.0-m2</version>
        <!--
        JIRA will already provide a number of dependencies that JRJC needs. We need to exclude them from the
        JRJC dependency as we don't want to package them up inside the plugin.
        -->
        <exclusions>
                <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                </exclusion>
                <exclusion>
                        <groupId>joda-time</groupId>
                        <artifactId>joda-time</artifactId>
                </exclusion>
                <exclusion>
                        <groupId>com.sun.jersey</groupId>
                        <artifactId>jersey-json</artifactId>
                </exclusion>
                <exclusion>
                        <groupId>com.google.guava</groupId>
                        <artifactId>guava</artifactId>
                </exclusion>
                <exclusion>
                        <groupId>com.atlassian.sal</groupId>
                        <artifactId>sal-api</artifactId>
                </exclusion>
                <exclusion>
                        <groupId>com.atlassian.event</groupId>
                        <artifactId>atlassian-event</artifactId>
                </exclusion>
                <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                </exclusion>
                <exclusion>
                        <groupId>commons-lang</groupId>
                        <artifactId>commons-lang</artifactId>
                </exclusion>
                <exclusion>
                        <groupId>commons-codec</groupId>
                        <artifactId>commons-codec</artifactId>
                </exclusion>
                <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-context</artifactId>
                </exclusion>
                <exclusion>
                        <groupId>com.sun.jersey</groupId>
                        <artifactId>jersey-core</artifactId>
                </exclusion>
        </exclusions>
</dependency>

答案 1 :(得分:2)

这可能不是您问题的直接答案,但可能会为您提供正确方向的一些线索。

JIRA挥舞双刃剑,即OSGI容器。在部署时,在本地环境中开发时看起来很好的东西炸弹。从OSGI的角度来看,你可能有幸找到了一些东西。去过那里,已被烧过几次。 HTH。