1

私は、必要なすべての依存関係を含むjarとして提供されるIMPINJ Octane SDK Javaを、mavenプロジェクトのSpark Frameworkとともに使用しようとしています。Spark Framework を含めるために maven を使用し、Octane SDK jar をビルド パスに追加します。私の pom.xml には spark 依存関係しかありません:

    <dependency>
        <groupId>com.sparkjava</groupId>
        <artifactId>spark-core</artifactId>
        <version>2.5</version>
    </dependency>

プログラムを実行しようとするたびに、次のエラーが発生します。

Exception in thread "Thread-1" java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.arrayFormat(Ljava/lang/String;[Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple;
at org.eclipse.jetty.util.log.JettyAwareLogger.log(JettyAwareLogger.java:619)
at org.eclipse.jetty.util.log.JettyAwareLogger.info(JettyAwareLogger.java:314)
at org.eclipse.jetty.util.log.Slf4jLog.info(Slf4jLog.java:74)
at org.eclipse.jetty.util.log.Log.initialized(Log.java:186)
at org.eclipse.jetty.util.log.Log.getLogger(Log.java:298)
at org.eclipse.jetty.util.log.Log.getLogger(Log.java:288)
at org.eclipse.jetty.util.component.AbstractLifeCycle.<clinit>(AbstractLifeCycle.java:35)
at spark.embeddedserver.jetty.EmbeddedJettyFactory.create(EmbeddedJettyFactory.java:34)
at spark.embeddedserver.EmbeddedServers.create(EmbeddedServers.java:57)
at spark.Service.lambda$init$0(Service.java:342)
at java.lang.Thread.run(Thread.java:745)

Octane SDK には slf4j が付属しており、Spark フレームワークにも依存関係として slf4j がありますが、バージョンが異なります。SLF4J API で次のスレッドNoSuchMethodErrorを見つけましたが、jar から slf4j を削除できたため、問題を解決できません。どうすればこれを機能させることができますか?

また、pom で slf4j を除外しようとしましたが、どちらも機能しませんでした。

<dependency>
        <groupId>com.sparkjava</groupId>
        <artifactId>spark-core</artifactId>
        <version>2.5</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

編集 (解決策): Octane SDK jar を抽出し、slf4j を削除して、圧縮して jar に戻しました。

4

1 に答える 1

0

私の理解では、sparks には slf4j 1.7.13 が必要です。次に、Octane をクラスパスに追加します (maven の依存関係ではありません)。この Octane jar には slf4j の古いクラスが含まれています。

Octane をダウンロードして自分の目で確かめてみました。2つのバージョンが含まれていることに気付きました:

  • OctaneSDKJava-1.22.0.30.jar
  • OctaneSDKJava-1.22.0.30-jar-with-dependencies.jar

OctaneSDKJava-1.22.0.30.jar を使用し、他のすべての依存関係を手動で含める必要がありますが、slf4j のものは含めないでください (または、逆に、OctaneSDKJava-1.22.0.30-jar-with-dependencies.jar を使用して slf4j を削除します)。


編集してコメントの質問に答えます。

最新のOctaneSDKJava-1.26.2.0-jar-with-dependencies.zipを開きました。これには、次の詳細を含む README.txt が含まれています。

依存関係

ランタイムの依存関係

コンパイルの依存関係

以下を含む JAXB RI 依存関係:

上記の 5 つの jaxb 依存関係は、https: //jaxb.dev.java.net/ から単一の jar "JAXB RI" で入手できます。この jar を実行し (ウィンドウをダブルクリックし、他のすべてのプラットフォームで「java -jar」を実行)、個々の jar を LTKJava/lib ディレクトリにコピーし、上記のランタイム依存関係を追加します。

テストの依存関係

于 2016-06-30T16:13:49.410 に答える