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