Is it possible to load a premain-class from a jar library packed within a jar library? I’have the following setup:
Contets of my library:
# 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
Now within my MANIFEST.MF I would like to use something like:
Manifest-Version: 1.0
Premain-Class: com.agentpackage.AgentClass
Class-Path: agent/myAgent.jar
But unfortunately if I “use” this setup with -javaagent:myLibrary.jar it gives me the following error message:
java.lang.ClassNotFoundException: com.agentpackage.AgentClass
FATAL ERROR in native method: processing of -javaagent failed
Is it somehow possible to access a premain-class within a .jar file?
My (truncated) ANT build file for 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>
I know I could do the following:
<jar destfile="myLibrary.jar" update="true">
<zipgroupfileset dir="lib" includes="myAgent.jar" />
<manifest>
<attribute name="Premain-Class" value="com.agentpackage.AgentClass" />
</manifest>
</jar>
But then the contents of myAgent.jar gets inflated within myLibrary.jar and thats not what I want. Thanks for any help.
Java doesn’t support loading nested jars.
You’ll have to use inflated version or place these two jars in the same folder and update classpath correspondingly.