2012-04-14 1 views
2

jar 라이브러리 내에 압축 된 jar 라이브러리에서 premain-class를로드 할 수 있습니까? 내 라이브러리의ANT로 jar 라이브러리에서 java premain-class로드

Contets : 다음 설치를 I'have 것은 그러나 불행하게도 I "를 사용하는 경우

Manifest-Version: 1.0 
Premain-Class: com.agentpackage.AgentClass 
Class-Path: agent/myAgent.jar 

:

# jar -tf myLibrary.jar 
META-INF/ 
META-INF/MANIFEST.MF 
agent/ 
agent/myAgent.jar 
com/ 
com/package/ 
com/package/subpackage/ 
com/package/subpackage/A.class 
com/package/subpackage/B.class 
com/package/subpackage/C.class 

이제 내 MANIFEST.MF에서 내가 좋아하는 뭔가를 사용하고 싶습니다

java.lang.ClassNotFoundException: com.agentpackage.AgentClass 
FATAL ERROR in native method: processing of -javaagent failed 

그것을이다 "-javaagent:myLibrary.jar이 설정은 나에게 다음과 같은 오류 메시지를 제공합니다 어떻게 든 .jar 파일 내 premain-class에 액세스 할 수 있습니까?

myLibrary.jar에 대한 나의 (절단) ANT 빌드 파일 :

<jar destfile="myLibrary.jar" update="true"> 
    <zipfileset dir="lib" includes="myAgent.jar" prefix="agent" /> 
    <manifest> 
     <attribute name="Class-Path" value="agent/myAgent.jar" /> 
     <attribute name="Premain-Class" value="com.agentpackage.AgentClass" />  
    </manifest> 
</jar> 

나는 다음을 수행 할 수 알고 :

<jar destfile="myLibrary.jar" update="true"> 
    <zipgroupfileset dir="lib" includes="myAgent.jar" /> 
    <manifest> 
     <attribute name="Premain-Class" value="com.agentpackage.AgentClass" /> 
    </manifest> 
</jar> 

그러나 myAgent.jar의 내용이 MYLIBRARY 내에서 팽창됩니다 .jar 그리고 그게 내가 원하는 건 아니야. 어떤 도움을 주셔서 감사합니다.

답변

1

Java는 중첩 된 jar로드를 지원하지 않습니다.

팽창 된 버전을 사용하거나이 두 개의 병을 같은 폴더에두고 그에 따라 클래스 경로를 업데이트해야합니다.

+1

미래에도 지원 될 수 있기를 바랍니다. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4648386 – Bogdan

+1

또한 다음을 발견했습니다. http://docs.oracle.com/javase/tutorial /deployment/jar/downman.html'Class-Path 헤더는 JAR 파일 내의 JAR 파일이나 인터넷 프로토콜을 통해 액세스 할 수있는 클래스가 아니라 로컬 네트워크의 클래스 또는 JAR 파일을 가리 킵니다. JAR 파일의 JAR 파일에있는 클래스를 클래스 경로에로드하려면 사용자 정의 코드를 작성하여 해당 클래스를로드해야합니다. ' – domi