По какой-то причине premain
моего Java агента запускается дважды, когда я запускаю программу внутри IDEA и добавляю jar агента через параметры виртуальной машины IDEA:
У меня есть следующий пример программы и добавил Java агента в IDEA через
Run Configuration
-> VM options
: -javaagent:/path/to/agent/MyJavaAgent.jar
package com.example;
public class Test {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
MyJavaAgent.jar
имеет следующую структуру:
.
├── com
│ └── example
│ └── MyJavaAgent.class
└── META-INF
└── MANIFEST.MF
MyJavaAgent. java
package com.example;
import java.lang.instrument.Instrumentation;
public class MyJavaAgent {
private static int callCount = 0;
public static void premain(String agentArgs, Instrumentation inst) {
callCount++;
System.out.println("premain call " + callCount);
}
}
MANIFEST.MF
Manifest-Version: 1.0
Premain-Class: com.example.MyJavaAgent
Can-Redefine-Classes: true
Can-Retransform-Classes: true
Can-Set-Native-Method-Prefix: true
Когда я запускаю образец Test.main()
, я получаю следующий вывод:
> Task :Test.main()
premain call 1
premain call 2
Hello World!
Когда я запускаю программу без IDEA, все выглядит так, как ожидалось:
> java -javaagent:/path/to/agent/MyJavaAgent.jar com.example.Test
premain call 1
Hello World!
Может кто-нибудь объяснить, что здесь происходит? Это ошибка IDEA?
Я использую IntelliJ IDEA 2019.3.4 (Ultimate Edition), Build #UI-193.6911.18