2017-10-02 9 views
0

OSGi 번들에 Apache 라이브러리 (axis-jaxrpc) 중 하나가 필요하지만 jar 파일에 java 내장 클래스 (javax.xml.namespace.QName)가 포함되어있어 결함이 있습니다. 나는 다른 대안으로 대체 할 수 없다. 다른 의존성에 대한 종속성이있다. 어떻게 될지 알고있다. :)maven 번들 플러그인 임베디드 deps 파일 또는 패키지 제외

문제는 패키지를 묶어서 시작하면 문제가된다. 괜찮아. 하지만 jaxrpc과 관련된 기능을 터치하면 <bootloader>에 의해 이미 QName이로드되었다는 LinkageError가 발생합니다.

jaxrpc jar를 내 번들 jar로 분해하고 앱을 시작하기 전에 javax.namespace 디렉토리를 수동으로 제거 (즉, 번들 jar 콘텐츠 수정) 할 수있었습니다. 그게 속임수 였어. 나는 더 이상 LinkageError를 얻지 못했다.

이제 문제는 ... 비 sado-maso 방식으로이 상황을 처리하고 문제가되는 클래스/패키지를 임베디드 jar 파일에서 제외하려면 어떻게해야합니까?

POM 조각 :

의존성 :

<dependency> 
    <groupId>org.apache.axis</groupId> 
    <artifactId>axis</artifactId> 
    <version>1.4</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>org.apache.axis</groupId> 
    <artifactId>axis-jaxrpc</artifactId> 
    <version>1.4</version> 
    <scope>provided</scope> 
</dependency> 

번들 플러그인 : ... 바꿔하려면

<plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>2.3.6</version> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
        <Export-Package> 
         /* application packages only */ 
        </Export-Package> 
        <Private-Package> 
         /* application packages only */ 
        </Private-Package> 
        <DynamicImport-Package> 
         * 
        </DynamicImport-Package> 
        <Import-Package></Import-Package> 
        <Include-Resource> 
         {maven-resources},target/classes/rebel.xml 
        </Include-Resource> 
        <Embed-Dependency> 
         /* other dependencies */ 
         axis, 
         axis-jaxrpc;inline=true, 
         commons-discovery, 
         commons-logging 
        </Embed-Dependency> 
       </instructions> 
      </configuration> 
     </plugin> 

는 다음과 같이 떨어지게해야합니까 어떤 방법이 있나요 :

<Embed-Dependency> 
    axis-jaxrpc;inline=true;exclude=javax.namespace.QName 
</Embed-Dependency> 

편집 : 선명도

예외 :

Caused by: java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "org.apache.axis.message.MessageElement.getChildElements(Ljavax/xml/namespace/QName;)Ljava/util/Iterator;" the class loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) of the current class, org/apache/axis/message/MessageElement, and the class loader (instance of) for interface javax/xml/soap/SOAPElement

답변

0

axis-jaxrpc<Embed-Dependency>에서 제거하고 <Private-Package> 부분에 신경 axis-jaxrpc에서 패키지를 추가 - 사람들은 번들에 포함됩니다. axis-jaxrpc 패키지에 대해 동일한 작업을 수행해야 할 수도 있습니다. 각각의 종속성 번들을 <Embed-Dependency>

에 의존하거나 추가하십시오.