Angelika Langer - Training & Consulting
HOME | COURSES | TALKS | ARTICLES | GENERICS | LAMBDAS | IOSTREAMS | ABOUT | CONTACT | Twitter | Lanyrd | Linkedin
 
HOME 

  OVERVIEW

  BY TOPIC
    JAVA
    C++

  BY COLUMN
    EFFECTIVE JAVA
    EFFECTIVE STDLIB

  BY MAGAZINE
    JAVA MAGAZIN
    JAVA SPEKTRUM
    JAVA WORLD
    JAVA SOLUTIONS
    JAVA PRO
    C++ REPORT
    CUJ
    OTHER
 

GENERICS 
LAMBDAS 
IOSTREAMS 
ABOUT 
CONTACT 
Aufsetzen eines JMH-Projekts in Eclipse

Aufsetzen eines JMH-Projekts in Eclipse  
 
Aufsetzen eines JMH-Projekts in Eclipse
Hier eine kurze Beschreibung, wie man ein JMH-Projekt in Eclipse aufsetzen kann, für Leute, die mit Eclipse, aber vielleicht nicht so sehr mit Maven vertraut sind.  Es gibt natürlich auch andere Wege, wie man einen JMH-Benchmark anlegen kann (siehe /JMH/).
 
 

Maven-Projekt in Eclipse erzeugen
 
 

JMH verwendet Maven.  Deshalb muss man ein Maven-Projekt in Eclipse erzeugen über die Menüs 

File => New => Project => Maven => Maven Project

Dann füllt man die Formulare aus (und legt die Workspace Location fest, etc.), bis man zum Formular " Select an Archetype " kommt.  Hier muss man aus dem Maven Central Katalog den Archetyp für JMH hinzufügen.  Dazu klickt man auf 

Configure => Add Remote Catalog

Als Katalogdatei muss man angeben: 

http://repo1.maven.org/maven2/archetype-catalog.xml

Als Beschreibung wäre "Maven Central" sinnvoll. Aus dem Maven Central Katalog muss dann der Archetyp 
org.openjdk.jmh:jmh-java-benchmark-archetype

ausgewählt werden  Am besten findet man ihn, wenn man die Filterfunktion verwendet und als Filter "jmh" angibt. 

Wenn die Aufforderung " Enter an artifact id " kommt, muss man folgende Angaben machen: 

  groupId=<package name, z.B. jmh> 
  artifactId=<project name, z.B. MyBenchmark> 
  version=<versin, z.B. 1.0> 
  package=<package name, z.B. jmh> 

Danach die Projekt-Erzeugung abschließen. Eclipse legt nun in der Workspace Location ein neues Projekt an mit dem Namen, der als "artifactId" angegeben wurde.  Es wird ein Package im Directory  src/main/java  mit der "groupId" als Package-Name angelegt.  In diesem Package-Directory gibt es eine Source-Datei  MyBenchmark.java .  Sie dient als Vorlage für einen JMH-Benchmark.   Man kann sie hernehmen und editieren.  Man kann aber auch nach Belieben eigene Packages und Sourcen importieren oder anlegen, wie in jedem anderen Projekt auch.  Am besten baut man sich eine Starter-Klasse mit  main() -Methode, in der die JMH-Optionen zusammengebaut, dem JMH-Runner übergeben und der der Runner gestartet wird. 

Annotation Processing ermöglichen

Für JMH werden Annotationen (wie z.B.  @Benchmark ) in die eigenen Sourcen eingefügt.  Der Annotation Processor von JMH sucht sie in den Sourcen und generiert daraus den eigentlichen Benchmark.  Die generierten Sourcen liegen hinterher im  target Directory des Eclipse Projekts. 

Damit Maven das Annotation Processing anstoßen kann, muss zuvor der m2e-apt Konnektor installiert werden.  Das kann man über den Eclipse Marketplace machen, d.h. über die Menüs 

Help => Eclipse Marketplace

Dort nach "m2e-apt" suchen und installieren.  Danach das automatische Annotation Processing einschalten über: 

Windows => Preferences => Maven => Annotation Processing =>  Automatically configure.
 

Build and run

Jetzt muss man nur noch das Projekt bauen. Eclipse sollte sich um alles kümmern (annotation processing, compiling, classpath setting, etc.).    main() -Klasse auswählen und laufen lassen.
 

Trouble Shooting: Projektbeschreibungsdatei pom.xml anpassen

Im Working Directory des Eclipse-Projekts liegt die Maven-Projektbeschreibung in der Datei  pom.xml .  Bisweilen muss man diese Datei modifizieren, falls es Probleme bei der Übersetzung der Sourcen gibt. 

Language level:
Es könnte sein, dass das Sprachlevel nicht passt, weil in den Sourcen die neuesten Sprachmittel verwendet werden.  Dann muss man in der  pom.xml  Datei die Properties ändern: 

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jmh.version>1.12</jmh.version>
<javac.target>1.6</javac.target>
<uberjar.name>benchmarks</uberjar.name>
</properties>

External libraries:
Wenn die eigenen Sources externe Bibliotheken brauchen (z.B.  commons-math.jar ) dann müssen sie als Dependency in der  pom.xml Datei eingetragen werden: 

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math</artifactId>
<version>2.0</version>
</dependency>
 

 

  © Copyright 1995-2018 by Angelika Langer.  All Rights Reserved.    URL: < http://www.AngelikaLanger.com/Articles/EffectiveJava/90.Performance.JMH-Micro-Benchmark-Harness/90.Performance.JMH-Micro-Benchmark-Harness.appendix.html  last update: 26 Oct 2018