Java Tools
IDE
Eclipse
So kann man an ein jar das Javadoc anhängen: Das Projekte anklicken, Menü, Project, Properties, Libraries, [jar], aufklappen, javadoc location.
So kann man ein jar für das Projekt erzeugen
Shortcuts
downcase:
UPCASE:
Breakpoints
Breakpoints können nur den aktuellen Thread anhalten, oder gleich die ganze VM. Den Default kann man so festlegen
In der Debug View kann man mit dem J! Symbol Brakepoints setzen, die nur bei Exceptions aktiv werden
Code formatieren
Dort New anklicken und ein eigenes anlegen.
anwenden lassen
Prevent Eclipse from auto formatting areas, set Java -> Codestyle formatter -> Edit -> Enable Off / On tags
* @formatter:on
*
* Format
* as you
* wish!
*
* @formatter:off
*/
Eclipse stürzt ab
Das Eclipse Error Log liegt im Workspace Ordner und endet auf .log.
Eclipse 3.1.1 und PermGen zu klein? In der eclipse.ini das hier mal mit mehr Speicher probieren
Wenn Eclipse in Dialogen abstürzt, in denen man durch das lokale Dateisystem navigiert (File open...) hilft seltsamerweise der eclipse.exe explizit den Pfad zur Java Installation mitzugeben.
Quellen mit einem JAR verknüpfen
Eclipse @author
Eigentlich setzt Eclipse z.B. bei generierten Kommentare für neue Klassen automatisch eine @author Annoation. Allerdings ermittelt Eclipse dann je nach Systemkonfiguration nicht den richtigen Namen. So kann man das in der eclipse.ini reparieren
Java imports automatisch von Eclipse verwalten lassen
Wenn z.B. in einer Klasse Code benutzt, der einen Import erforderlich gemacht hat, und entfernt diesen Code in Eclipse, kann Eclipse den überflüssigen Import automatisch entfernen
Eclipse Plugins
Eclipse UML Plugins
The ObjectAid UML Explorer for Eclipse
Netbeans
build Ordner
Man kann in Netbeans kein vorhandenes Projekt importieren, wenn man es dort bereits einen build Ordner gibt.
Fehlermeldung:
Workarround:
- Den vorhanden Ordner build Ordner temporär umbennen
- Das Projekt normal importieren
- CTRL 2 drücken, Projekt aufklappen, nbproject, project.properties, build.dir, diesen Wert abändern
- Temporär umbennaten buidl Ordner wieder build nennen
- Fertig
JDK
So kann man das JDK in Netbean umstellen: Rechtsklick auf das Projekt, Libraries (!), Java Platform. Falls das JDK noch nicht eingerichtet wurde: Manage Platforms (es können nur JDK ausgewählt werden, keine JRE).
Falls das Source Level sich auch ändert (z.B. von 1.4 auf 1.6) geht das so: Rechtsklick auf das Projekt, Sources, Source / Binary Format.
Build
ANT
Das Apache ANT Werkzeug. Vergleichbar mit Makefiles, Schwerpunkt liegt aber nicht auf Abhängigkeiten (das kann Java selbst) sondern auf der Bereitstellung plattformunabhängiger Befehle (z.B. zum Kopieren von Dateien).
Links
Kleines ANT Beispielprojekt
<!-- set global properties for this build -->
<property name="src" location="src" />
<property name="build" location="build" />
<property name="dist" location="dist" />
<property name="mainclass" value="de.tgunkel.Test.Foo" />
<property name="distjarname" value="MyProject" />
<!-- path for compiling the code -->
<path id="compilepath">
<fileset file="../../src/lib/foo_1.5.0.jar" />
<fileset dir="../../src/lib/">
<include name="**/*.jar"/>
</fileset>
</path>
<!-- path for running the code -->
<path id="runpath">
<path refid="compilepath"/>
<pathelement location="build"/>
<pathelement location="etc"/>
<fileset file="../../lib/otherlib/foo-2.0.0.jar" />
</path>
<!-- clean -->
<target name="clean" description="clean">
<!-- <delete dir="${build}" /> -->
<delete includeemptydirs="true">
<fileset dir="${build}" includes="**/*"/>
</delete>
</target>
<!-- Some initial stuff -->
<target name="init" description="init">
<!-- Create the time stamp -->
<tstamp/>
<mkdir dir="${build}"/>
<mkdir dir="${dist}"/>
</target>
<!-- compile it -->
<target name="compile" description="compile the source" depends="init">
<javac srcdir="${src}" destdir="${build}">
<classpath refid="runpath">
</classpath>
</javac>
</target>
<!-- run the compiled code -->
<target name="run" depends="compile" description="Run the program" >
<java classname =3D "${mainclass}">
<arg value="foo" />
<arg value="bar" />
<arg value="42" />
<classpath refid="runpath" />
</java>
</target>
<!-- create a jar -->
<target name="jar" description="makes a jar" depends="compile">
<jar basedir="${build}" compress="true" jarfile="${dist}/${distjarname}">
<manifest>
<attribute name="Built-By" value="Thorsten Gunkel" />
<attribute name="Main-Class" value="${mainclass}" />
<!-- You need the whole run time path here for an executable jar
<attribute name="Class-Path" value="../../../src/lib/foo_1.0.0.jar" />
-->
</manifest>
</jar>
</target>
</project>
Variablen mit Werten aus anderen Dateien füllen
<property name="JAVA_HOME" value="${YOUR_JAVA_HOME}" />
Warnungen des Compilers wie Fehler behandeln lassen
Wenn man erreichen möchte, dass sich kein Code eingebaut wird, der nur mit Warnungen übersetzt wird, kann man diese nützlich Option setzen:
Bzw. über ant
...
%lt;compilerarg value="-Xlint" />
%lt;compilerarg value="-Werror" />
%lt;/javac>
Jede Warnung wird dann wie ein Fehler behandelt und führt zum Abbruch des Compilers. So werden Warnungen sehr früh bemerkt.
Textersetzung
So kann man mit ANT in Dateien Textersetzung durchführen
<target name="build" description="Replace some strings">
<replace dir=".">
<include name="myfiles/**" />
<replacefilter token="__FOO__" value="BAR" />
<replacefilter token="__43__" value="42" />
</replace>
</target>
</project>
Java Debug
<jvmarg value="-Xnoagent" />
<jvmarg value="-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y" />
Classpath setzen
So kann man den Class-Path in einem Manifest setzen
<property name="manifest_file" value="$../manifest.mf" />
<!-- This path will be added to the manifest file as the class path-->
<path id="manifestpath_as_path">
<fileset dir="../lib">
<include name="**/*.jar"/>
</fileset>
</path>
<!-- This converts the manifestpath into a format that manifest task will accept. The jarfile attribute is require, but only the path of the file is relevant -->
<manifestclasspath property="manifestpath_as_list" jarfile="../lib/FIXME.jar">
<classpath refid="manifestpath_as_path" />
</manifestclasspath>
<!-- This creates the manifest file -->
<target name="CreateManifest">
<manifest file="${manifest_file}">
<attribute name="Class-Path" value="${manifestpath_as_list}" />
</manifest>
</target>
Maven
one-jar
Mit one-jar kann man mehrere jars in ein großes jar packen und über one-jar selbststartend machen.
Decompiler
JAD
Mit dem JAD Java Decompiler aus class-Dateien wieder lesbaren Quellcode machen. Mit dem Eclipse Plugin JADClipse sogar vollautomatisch öffnen der entsprechenden Klassen. Wenn man eine Eclipse Version neuer als Indigo einsetzt, muss man manuell in den Eclipse Einstellungen unter
diese Dateiendung
auch mit Jadclispe verbinden. Siehe auch Configuring eclipse to use jad.
OutOfMemoryError: Java heap space
See also java.lang.OutOfMemoryError: GC overhead limit exceeded
Als erstes den Heap Speicher hochsetzen
Falls das nicht hilft, aktuellen heap Speicherverbrauch des Programms mit der genannten PID ausgeben
Write memory consumption into a file
Oder aber abwarten bis es nicht mehr gereicht hat und dann erst auswerten
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid29731.hprof ...
Heap dump file created [1271286324 bytes in 143.266 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
...
And see the contents (but jhat is really slow for bigger hprof files and needs a lot of memory)
...
Started HTTP server on port 7000
Better is jvisualvm, just start it, Load, switch to hprof files, open it
Eclipse Memory Analyzer Plugin (MAT) And do Eclipse File Open to open the hprof file created during an out of memory
Wie oft läuft full garbage collection an?
Code quality
CodePro Analytix
CodePro Analytix Can find copy that was copied arround
Sonar lint
https://marketplace.eclipse.org/content/sonarlint
Metrics
Metrics Berechnet für den Code verschiedene Metriken und zeigt wo im Code entsprechende Richtwerte überschritten werden.
Performancemessungen / Profiler
YourKit
JRat
So startet man das zu messende Programm
So kann man sich die Ergebnisse mit dem mitgelieferten Viewer ansehen
JRat hatte allerdings Probleme mit Hibernate und Annotations.
JIP
So startet man das zu messende Programm
Am einfachsten ist es, wenn [DIR] ein absoluter Pfad ist.
Andere Variante
Auch hier ist es einfacher, wenn [DIR] und [DIR2] absolute Pfade sind.
Im Paket ist ein Beispiel für eine profile.properties enthalten. Damit man sich die Ergebnisse visualisieren lassen kann, muss man in der properties mindestens
Ebenfalls nützlich ist der Eintrag
So kann man sich die Ergebnisse schließlich visualisieren lassen
Wobei hier [DIR3] der Ordner ist, in den JIP die Messwerte Schreiben sollte.
jvisualvm
Detailed graphs about what Java programs on your computer are currently consuming
http://www.jvmmonitor.org
Plugin for Eclipse to get a first idea what your program is consuming