java инструментовка jar в затмении - ошибка в manifest.mf - PullRequest
0 голосов
/ 08 июня 2011

Я пытаюсь использовать класс java.lang.instrument.Instrumentation, который требует использования класса 'premain' - хорошее описание можно найти в стеке .

.проблема в том, что я сделал это, и у меня возникли проблемы с использованием его в другой программе.Мой класс выглядит следующим образом:

public class InstrumentationWrapper {
  private static final String INSTR_KEY = "test.instrumentation";
  private static Instrumentation instrumentation;

  public static void premain(String options, Instrumentation inst) {
    Properties props = System.getProperties();
    if(props.get(INSTR_KEY) == null)
      props.put(INSTR_KEY, inst);
  }

  public static Instrumentation getInstrumentation() { 
    if (instrumentation == null) {
      instrumentation = (Instrumentation) System.getProperties().get(INSTR_KEY); 
    }

    return instrumentation;
  }

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

  public static long getSizeOfObjects (Collection<?> col) {
    long cumSize = 0;

    for (Object o : col) {
      cumSize = getObjectSize (o);
    }

    return cumSize;
  }
}

Манифест находится в файле Jar следующим образом:

$ jar -tf target/instrumentator-1.0.jar
META-INF/
META-INF/MANIFEST.MF
com/
com/testTools/
com/testTools/instrumentation/
com/testTools/instrumentation/InstrumentationWrapper.class
META-INF/maven/
META-INF/maven/com.netrecon.testTools/
META-INF/maven/com.netrecon.testTools/instrumentator/
META-INF/maven/com.netrecon.testTools/instrumentator/pom.xml
META-INF/maven/com.netrecon.testTools/instrumentator/pom.properties

, а MANIFEST.MF - просто:

$ more src/resources/META-INF/MANIFEST.MF

Manifest-Version: 1.0

Premain-Class: com.testTools.instrumentation.InstrumentationWrapper

В конфигурации запуска в eclipse я получаю следующую проблему

Не удалось найти атрибут манифеста Premain-Class в Z:\workspace\<project>\testTools\instrumentor\target\instrumentator-1.0.jar

, и опция -javaagent:${workspace_loc:instrumentator}\target\instrumentator-1.0.jar

Iя действительно не уверен, как мне заставить это работать - все, что мне действительно нужно, это иметь тестовый набор, который позволит мне взглянуть на отпечаток массива.Есть идеи?

1 Ответ

0 голосов
/ 08 июня 2011

У меня ничего не выскакивает, но если вы хотите провести дополнительную проверку, вы можете написать быстрый класс, чтобы открыть файл Jar с помощью java.util.jar.JarFile и программно проверить манифест. Это укажет, связана ли проблема с тем, как вы написали свой манифест (может быть, пробел в неправильном месте или что-то в этом роде) или с тем, как он загружается (возможно, в спецификации premain класса есть опечатка?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...