2016-06-30 2 views
1

나는 메이븐 프로젝트에서 Spark Framework와 함께 필요한 모든 의존성을 포함하는 jar 파일로 제공되는 IMPINJ Octane SDK Java를 사용하려고합니다. Spark Framework를 포함하기 위해 나는 maven을 사용했고 옥탄 SDK jar가 빌드 경로에 추가되었습니다. 내 pom.xml에는 스파크 종속성 만 있습니다.메이븐 종속성 + 로컬 jar 빌드 경로 = slf4j 충돌

<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) 

옥탄 SDK는 SLF4J 함께 제공하고 스파크 프레임 워크는 종속성으로 SLF4J했지만 서로 다른 버전이 있습니다. 다음 스레드를 발견했습니다 NoSuchMethodError with SLF4J API하지만 jar 파일에서 slf4j를 제거 할 수 있으므로 문제를 해결할 수 없습니다. 이 기능을 어떻게 작동시킬 수 있습니까?

나는 또한 치어에 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> 

EDIT (솔루션) : 나는 옥탄 SDK 항아리, 제거 SLF4J를 추출 항아리로 다시 압축 .

답변

0

제 생각에 스파크에는 slf4j 1.7.13이 필요합니다. 그런 다음 클래스 패스에 옥텟을 추가합니다 (메이븐 종속성을 통하지 않음).이 옥탄 병은 이전 클래스의 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를 제거합니다).


편집은 코멘트에서 질문에 대답 :

나는 다음과 같은 세부 README.txt 파일이 들어있는 최신 OctaneSDKJava-1.26.2.0-jar-with-dependencies.zip을 오픈 :

DEPENDENCIES

RUNTIME 종속성

컴파일 DEPENDENCIES

JAXB RI 포함 종속성

JAXB 종속성 위의 다섯 https://jaxb.dev.java.net/에서 하나의 항아리 "JAXB RI"에서 사용할 수 있습니다. 이 항아리 (더블 클릭 창, 모든 다른 플랫폼 "-jar 자바")를 실행하고 종속

TEST 종속성

+0

[정보] \ - com.sparkjava : spark-core : jar : 2.5 : 컴파일 [정보] \ - org.slf4j : slf4j-api : jar : 1.7.13 : 컴파일 '이것은 출력입니다. 옥탄 SDK Jar 파일을 추출하고 slf4j 1.5.0을 찾았습니다. – mactron

+0

oh ... 제가 옥탄은 클래스 패스에 의존성으로 추가되지 않았습니다. 그리고 그것은 자신의 항아리와 함께 제공됩니다 ... 그래서 당신의 문제/솔루션은 오히려 런타임에 빌드 시간이 아니라 .. – alexbt

+0

내 새로운 이해와 내 대답을 업데이 트 :) – alexbt