2012-04-14 71 views
2

是否有可能从jar库中加载的jar库加载premain-class? I'have以下设置:我的图书馆的从jar库中加载java premain-class与ANT

Contets:

# 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内我想用这样的:但不幸的是,如果我“使用

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

“此设置与-javaagent:myLibrary.jar它给我以下错误信息:

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

是吗?以某种方式可能访问.jar文件中的premain-class?

我的(截)ANT建立myLibrary.jar文件:

<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放在同一个文件夹中并相应地更新classpath。

+1

希望它能在将来支持它:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4648386 – Bogdan 2012-04-16 09:42:33

+1

此外,我发现这个:http://docs.oracle.com/javase/tutorial /deployment/jar/downman.html'Class-Path头指向本地网络上的类或JAR文件,而不是JAR文件中的JAR文件或通过Internet协议访问的类。要将JAR文件中的JAR文件中的类加载到类路径中,您必须编写自定义代码来加载这些类 – domi 2012-04-16 10:58:04