2010-02-15 18 views
10

得到一个对象的大小当我尝试运行Java程序(java -javaagent:size.jar ObjectSizeTest)我得到以下错误:“未能加载倍美类清单属性”试图用java剂

Failed to load Premain-Class manifest attribute from D:\workspace\ObjectSizeTest\size.jar 
Error occurred during initialization of VM 
agent library failed to init: instrument 

这里是ObjectSizeTest代码:

public class ObjectSizeTest { 
    public static void main(String[] args) { 
     String s = new String("sai"); 
     System.out.println(ObjectSizeFetcher.getObjectSize(s)); 
    } 
} 

MANIFEST.MF(用于size.jar):

Manifest-Version: 1.0 
Created-By: 1.5.0_18 (Sun Microsystems Inc.) 

Premain-Class: ObjectSizeFetcher 

这里为O bjectSizeFetcher的代码:

import java.lang.instrument.Instrumentation; 

public class ObjectSizeFetcher { 
    private static Instrumentation instrumentation; 

    public static void premain(String args, Instrumentation inst) { 
     instrumentation = inst; 
    } 

    public static long getObjectSize(Object o) { 
     return instrumentation.getObjectSize(o); 
    } 
} 
+0

您会收到以下错误......还有......? (你没有问过问。) – JasCav 2010-02-15 14:32:11

+0

size.jar的源代码在哪里?我想我们需要那些。 – rochb 2010-02-15 14:33:23

+0

您可以发布Manifest文件吗?我认为您的Premain-Class在清单文件中没有完全限定,或者无法找到该类。 – 2010-02-15 14:34:40

回答

5

请确保您给出了包含pre-main方法的类的完整java路径。例如像这个org.eclipse.anotherpckg.ObjectSizeFetcher那样的 。其次,在名字和回车结束前必须有空格。例如

Manifest-Version: 1.0 
Created-By: 1.5.0_18 (Sun Microsystems Inc.) 
Premain-Class: org.eclipse.package.ObjectSizeFetcher 

最后一行是由于回车。

+1

它在这段代码中不可见,但是在文件结尾的新行确实是必需的。 – 2014-10-11 15:56:45

0

这是jar命令本身的一个问题。 jar命令必须与cfm属性一起使用,以包含自定义的MANIFEST.MF,否则jar将创建一个文件并插入其自己的内容,这些内容不包括PreMain-Class属性,正如我们在定制的manifest.mf文件中提到的那样。

1

你应该在MANIFEST.MF补充:

Premain-Class: org.your.package.ObjectSizeFetcher +新线

insted的

Premain-Class: ObjectSizeFetcher