2014-12-24 2 views
0

저는 maven에서 apache-commons-codec-1.8을 사용하는 라이브러리를 사용하는 mule 프로젝트를 빌드하려고합니다. 현재 뮬 3.5가 지원하는 버전은 1.3Mule 프로젝트의 Maven 종속성. 클래스 로더 컨트롤이 예상대로 작동하지 않습니다.

입니다.이 Ive를 해결하려면 mule에서 클래스 로더 컨트롤을 구현하고 mule-deploy.properties에서 다음을 수행하여 라이브러리의 버전을로드하지 못하도록 뮬을 차단하십시오.

loader.override=-org.apache.commons.codec

는 또한 나는 도서관의 1.9 버전을 포함하는 내 pom.xml 업데이트되었습니다. 다음은 프로젝트에서 mvn:dependency tree을 실행하는 스냅 샷입니다. 내 시험 방법을 실행할 때 mvn:depedency tree 그러나, 나는 그것이 apache-commons의 이전 버전을 참조 있기 때문에 명확하게 런타임 예외

java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString([B)Ljava/lang/String; 
    at com.nimbusds.jose.util.Base64URL.encode(Base64URL.java:64) 
    at com.nimbusds.jose.util.Base64URL.encode(Base64URL.java:91) 
    at com.nimbusds.jose.Header.toBase64URL(Header.java:238) 
    at com.nimbusds.jose.JWSObject.<init>(JWSObject.java:101) 
    at com.package.components.lastmile.originator.TokenSignerTemplate.sign(TokenSignerTemplate.java:109) 
    at com.package.components.lastmile.originator.TokenSignerTemplate.signClaim(TokenSignerTemplate.java:122) 
    at com.package.orchestration.LMSFakeClaimsHandler.testSignParse_Positive(LMSFakeClaimsHandler.java:120) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 

를 얻을. 이전 버전이 아닌 최신 버전 만 참조하려면 어떻게해야합니까?

mule-deploy.properties

#Fri Dec 12 09:58:12 PST 2014 
loader.override=-org.apache.commons.codec 
redeployment.enabled=true 
encoding=UTF-8 
domain=default 
config.resources=..flows. 

.

<dependencies> 
.... 
<dependency> 
      <groupId>commons-codec</groupId> 
      <artifactId>commons-codec</artifactId> 
      <version>1.9</version> 
     </dependency> 


.... 
    <!-- Test to check commons-codec works --> 
     <dependency> 
     <groupId>org.mule.transports</groupId> 
     <artifactId>mule-transport-http</artifactId> 
     <version>${mule.version}</version> 
     <scope>provided</scope> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-codec</groupId> 
       <artifactId>commons-codec</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    </dependencies> 

P.S 의 pom.xml의

관련 위치 : 같은 조각은이 노새와 관련된 문제입니다 나타내는 비 노새 프로젝트를 잘 작동하는 것 같다.

답변

0

다음 제외 사항을 추가하십시오.

<dependency> 
     <groupId>org.mule.transports</groupId> 
     <artifactId>mule-transport-http</artifactId> 
     <version>${mule.version}</version> 
     <scope>provided</scope> 
     <exclusions> 
      <exclusion> 
       <groupId>commons-codec</groupId> 
       <artifactId>commons-codec</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

그런 다음 Commons Codec 1.9의 종속성을 추가하십시오. 그러면 mule-deploy.properties의 재정의 속성이 예상대로 작동합니다.

업데이트 : 12/30 : 재정의 속성이 문제인 것 같습니다.

loader.override=-org.apache.commons.codec is not correct. 

이 도움이 다음

loader.override=org.apache.commons.codec 

희망을 봅니다.

+0

아니 (재산 loader.override=-org.apache.commons.codec을 유지) 서버 lib 디렉토리 공유 폴더에 최신 코덱 LIB 버전을 삽입하려고합니다. 작동하지 않습니다.I는 다음 항목 \t' \t \t \t 가공 코덱 \t \t \t 가공 코덱 \t \t \t 1.9 \t \t' 이외에 의존성 태그의 일부로서 상기 추가 같은 오류가 발생합니다. – KodeSeeker

+0

pom.xml 및 mule-deploy.properties를 OP에 추가하십시오. 그 점이 우리가이 문제를 이해하는 데 도움이 될 수 있습니다. – user1760178

+0

완료. 추가 정보가 필요한 경우 알려주세요. – KodeSeeker

0

Mule 서버에서 Mule 응용 프로그램을 실행하는 경우 코덱 lib가 서버 자체에 존재하기 때문에 pom에서 lib를 제외하면 작동하지 않습니다.

관련 문제