Wie führe ich einen JMH -Benchmark in Maven mit Exec: Java anstelle von Exec: Exec aus?
Posted: 20 May 2025, 16:13
Dieser Beitrag auf javapapers.com zeigt, wie Sie einen JMH -Benchmark in Maven ausführen, indem MVN Exec: Exec eingeben. Das Ausführen von JMH in Maven ist ziemlich praktisch, da Sie sie problemlos aus einer IDE -Laufkonfiguration oder in einer Maven -Phase ausführen können. />
Normalerweise startet JMH ein weiteres VM, um die Benchmarks zu betreiben. Sie werden also mindestens 3 VMs gleichzeitig ausgeführt. Klasse direkt in den VM Maven läuft. Als ich jedoch versuchte, Maven so zu konfigurieren, dass JMH mit Exec: Java ausführt, stürzt der Benchmark wegen fehlender Klassen ab:
Hier ist der relevante Teil der pom.xml :
Und hier ist, wie ich JMH von My.Benchmark :
ausführe
Ich erkenne, dass JMH die Java.class.Path -Systemeigenschaft verwendet, um den Klassenpfad für die gabelhaften VMs zu bestimmen und dass diese Eigenschaft keine Maven -Projektabhängigkeiten enthält. Aber was ist der bevorzugte Weg, um damit umzugehen?
Normalerweise startet JMH ein weiteres VM, um die Benchmarks zu betreiben. Sie werden also mindestens 3 VMs gleichzeitig ausgeführt. Klasse direkt in den VM Maven läuft. Als ich jedoch versuchte, Maven so zu konfigurieren, dass JMH mit Exec: Java ausführt, stürzt der Benchmark wegen fehlender Klassen ab:
Code: Select all
# JMH 1.11.3 (released 40 days ago)
# VM version: Error: Could not find or load main class org.openjdk.jmh.runner.VersionMain
# VM invoker: C:\Program Files\Java\jdk1.7.0\jre\bin\java.exe
[...]
# Run progress: 0.00% complete, ETA 00:02:40
# Fork: 1 of 1
Error: Could not find or load main class org.openjdk.jmh.runner.ForkedMain
Code: Select all
org.codehaus.mojo
exec-maven-plugin
1.4.0
my.Benchmark
ausführe
Code: Select all
public static void main(String[] args) throws RunnerException {
Options options = new OptionsBuilder().include(my.Benchmark.class.getSimpleName())
.forks(1).build();
new Runner(options).run();
}