使用ANT从jar库加载java premain-class

时间:2012-04-14 15:51:18

标签: java class ant jar

是否可以从jar库中打包的jar库中加载premain-class?我有以下设置:

我的图书馆的竞争:

# 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?

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 个答案:

答案 0 :(得分:1)

Java不支持加载嵌套jar。

您必须使用虚增版本或将这两个jar放在同一个文件夹中并相应更新类路径。