私は、必要なすべての依存関係を含む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 に戻しました。