1

私のJira5.0プラグインは、次の例外を除いて壊れています。

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        ...
Caused by: java.lang.ExceptionInInitializerError
    at org.apache.axis.description.OperationDesc.<clinit>(OperationDesc.java:65)
    at com.xyz.germander.AddTestTrackLinkDialogAction.doConfirm(AddTestTrackLinkDialogAction.java:23)
    ... 148 more
Caused by: java.lang.ClassCastException: org.apache.commons.logging.impl.SLF4JLogFactory cannot be cast to org.apache.commons.logging.LogFactory
    at org.apache.axis.components.logger.LogFactory.getLogFactory(LogFactory.java:41)
    at org.apache.axis.components.logger.LogFactory.<clinit>(LogFactory.java:33)
    ... 150 more

参考までに、これはClassCastExceptionをスローするメソッドです。

private static final org.apache.commons.logging.LogFactory getLogFactory() {
    return (org.apache.commons.logging.LogFactory)
        AccessController.doPrivileged(
            new PrivilegedAction() {
                public Object run() {
                    return DiscoverSingleton.find(org.apache.commons.logging.LogFactory.class,
                                   org.apache.commons.logging.LogFactory.FACTORY_PROPERTIES,
                                   org.apache.commons.logging.LogFactory.FACTORY_DEFAULT);
                }
            });
}

...詳細については、org.apache.commons.logging.LogFactory.FACTORY_DEFAULTは「org.apache.commons.logging.impl.LogFactoryImpl」であり、FACTORY_PROPERTIESは、検索するプロパティファイルの名前であると想定されています。私のorg.apache.commons.loggingjarには、「commons-logging.properties」があります。

プラグインのリソースディレクトリにcommons-logging.propertiesファイルを作成してみました。そのファイルには次のものが含まれています。

priority=1
org.apache.commons.logging.Log=org.apache.commons.logging.impl.LogFactoryImpl

...しかし、getLogFactory()はまだSLF4JLogFactoryを取得し、キャストに失敗するため、無視されるようです。したがって、次のようになります。

  • このcommons-logging.propertiesファイルは別の場所にある必要があります
  • ロギングクラスを別のものに設定する必要があります
  • それ以外の場合、プロジェクトは誤って構成されています。おそらくJiraレベルか、プラグインか、Mavenか...わかりません。

私はかなり困惑しています、そしてどんな指導もいただければ幸いです。

ここにも同様の質問がありますが、posterがorg.apache.axis.description.OperationDescではなくorg.apache.axis.attachments.AttachmentsImplの初期化からgetLogFactoryで同じ例外を取得していた点が異なります。(JiraではなくConfluenceプラグインでもあります。)しかし、誰もそこで応答しませんでした。

4

2 に答える 2

2

axis-1.3-atlassian-1のみの結果を含む

java.lang.ClassNotFoundException: org.apache.axis.transport.http.AdminServlet

私のアプリケーションには、appache軸ライブラリに含まれているAdminServletが必要です。最後に、両方を含めると、問題なく動作します。

    <dependency>
        <groupId>org.apache.axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.3-atlassian-1</version>
        <scope>provided</scope>
    </dependency>
于 2012-09-20T09:57:34.523 に答える
1

発見:Atlassianはaxisライブラリをフォークし、JiraはApacheの最新のaxis-1.4ではなくaxis-1.3-atlassian-1を使用するようになりました。axis-1.3-atlassian-1は、axis-1.4のような1.1.1ではなく、commons-loggingの1.0.4バージョンを使用します。

プラグインの依存関係をaxis-1.4からaxis-1.3-atlassian-1に変更すると、問題が解決しました。SLF4JLogFactoryが1.0.4ではorg.apache.commons.logging.LogFactoryにキャストできたが、1.1.1ではキャストできなかったのではないかと疑っていますが、テストしていません。

Jiraの場合は、依存関係のスコープを「提供済み」として指定してください。指定しないと、2回読み込まれるために問題が発生します。これがpomスニペットです:

    <dependency>
        <groupId>axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.3-atlassian-1</version>
        <scope>provided</scope>
    </dependency>
于 2012-07-30T21:20:39.723 に答える