maven依赖+构建路径中的本地jar = slf4j冲突

时间:2016-06-30 15:56:23

标签: java maven jar spark-framework octane-sdk

我尝试在maven项目中使用IMPINJ Octane SDK Java作为jar,包括所有需要的依赖项和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 Framework也有slf4j作为依赖项,但它们有不同的版本。我找到了以下线程NoSuchMethodError with SLF4J API但是因为我可以从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。

1 个答案:

答案 0 :(得分:0)

我的理解是火花需要slf4j 1.7.13。 然后,将Octane添加到类路径中(而不是通过maven依赖项),并且此Octane jar包含较旧的slf4j类。

我刚刚下载了Octane来亲眼看看。我注意到它包括2个版本:

  • OctaneSDKJava-1.22.0.30.jar
  • OctaneSDKJava-1.22.0.30-罐与 - dependencies.jar

您需要使用OctaneSDKJava-1.22.0.30.jar并手动包含所有其他依赖项,但不包括slf4j(或相反,使用OctaneSDKJava-1.22.0.30-jar-with-dependencies.jar并删除slf4j)。< / p>

编辑回答评论中的问题:

我打开了最新的 OctaneSDKJava-1.26.2.0-jar-with-dependencies.zip ,其中包含一个README.txt,其中包含以下详细信息:

  

相关内容

     

RUNTIME DEPENDENCIES

           

编辑依赖

           

JAXB RI依赖项包括:

           

以上五个jaxb依赖项可以在一个jar&#34; JAXB中使用   RI&#34;来自https://jaxb.dev.java.net/。执行这个jar(doubleclick   windows,&#34; java -jar&#34;所有其他平台)并复制   单个jar到LTKJava / lib目录)加上运行时   依赖

     

TEST DEPENDENCIES