Java Tools


Java Konventionen

Warum Konventionen?

Namensgebung

Namen für Wort Bezeichner beginnen mit Beispiele
Variablen, Attribute Substantive, Adjektive mit Kleinbuchstaben done, length, rein, raus
Konstanten Substantive, Adjektive nur Grossbusstaben ONE, ZERO, BLUE, RED, MIN_WIDTH
Methoden Substantive, Adjektive, Verben mit Kleinbuchstaben toString(), print(), multiply(), length
Klassen, Interfaces Substantive mit Grossbuchstaben StringBuffer, PrintWriter
Pakete Substantive nur Kleinbuchstaben, Worttrennung mit '.' edu.unima.kredel.pk1, edu.cmu.cs.author

Schreiben Sie bei Bezeichnern, die aus mehreren Worten bestehen, die ersten Buchstaben der inneren Worte gross:
toString, toByte, drawLine, BitString, BigInteger.

Benutze die Java Dokumentationskommentare.

Benutze konsistente Einrückungen.

Methoden: maximal eine Bildschirmseite Code.

Dateien/Klassen: maximal 1000 Zeilen Code.

Defensiv Programmieren

Weitere Empfehlungen

Empfehlungen von Granny.


Java Development Kit (JDK)

Basic Tools

These tools are the foundation of the Java Development Kit. They are the tools you use to create and build applications.

javac The compiler for the Java programming language.
java The launcher for Java applications. In this release, a single launcher is used both for development and deployment.
The old deployment launcher, jre, is no longer provided.
javadoc API documentation generator. Also see Javadoc Enhancements for 1.2
appletviewer Run and debug applets without a web browser.
jar Manage Java Archive (JAR) files.
jdb The Java Debugger.
javah C header and stub generator. Used to write native methods.
javap Class file disassembler
extcheck Utility to detect Jar conflicts.

Remote Method Invocation (RMI) Tools

These tools help to create apps that interact over the Web or other network.

rmic Generate stubs and skeletons for remote objects.
rmiregistry Remote object registry service.
rmid RMI activation system daemon.
serialver Return class serialVersionUID.

Internationalization Tools

This tool helps to create localizable apps.

native2ascii Convert text to Unicode Latin-1.

Security Tools

These tools help you set security policies on your system and create apps that can work within the scope of security policies set at remote sites.

keytool Manage keystores and certificates.
jarsigner Generate and verify JAR signatures.
policytool GUI tool for managing policy files.

Java IDL Tools

These tools are used when creating apps that use CORBA to access databases.

tnameserv Provides access to the naming service.
idltojava Generates .java files that map an OMG IDL interface and enable an application written in the Java programming language to use CORBA functionality. This tool is available for download from the Java IDL web site. Documentation for the idltojava compiler is included in the download.

Integrierte Entwicklungsumgebungen (IDE)

Beispiele

Symantecs Visual Cafe 4.0:

Symantec Visual Cafe 4.0

Eclipse 2.0:

Eclipse 2.0

Forte4Java, Netbeans 3.0:

Forte4Java, Netbeans 3.0

ArgoUML, Poseidon:

ArgoUML
 
Poseidon

andere Java Tools

Neben den schon genannten Tools gibt es noch eine Reihe weiterer Java Compiler und Interpreter.


Ant Build Tool

Ant-Logo

build.xml für PK1

Definitionen in build.xml:

<?xml version="1.0" encoding="iso-8859-1" ?>

<project name="pk1" default="usage" basedir="." >

  <property name="src"      value="." />
  <property name="build"    value="." />
  <property name="doc"      value="doc" />
  <property name="test"     value="test" />

  <property name="libs"     value="/home/heinz/java/lib" />
  <property name="log4j"    value="${libs}/log4j.jar" />
  <property name="junit"    value="${libs}/junit.jar" />

  <property name="cp"       value="${log4j}:${junit}:." />
  <property name="version"  value="0.1" />

<target name="vorher" >
  <!-- set properties DSTAMP, TSTAMP -->
  <tstamp />
  <!-- mkdir dir="${test}"  /-->
</target>

<target name="usage" >
  <echo message="ant <name> cl='cmd'"  />
  <!--echoproperties /-->
</target>

<target name="compile" depends="vorher,depend" >
  <javac srcdir="${src}" destdir="${build}" 
         classpath="${cp}" />
</target>

<target name="doc" >
  <javadoc sourcepath="${src}" destdir="${doc}" private="true" >
     <fileset dir="." includes="**/*.java"  />
  </javadoc>
</target>

<target name="depend" depends="vorher" >
  <depend srcDir="${src}" destDir="${build}" 
          dump="true" closure="true" >
  </depend>
</target>


<target name="test" depends="compile" >
  <java  classname="HalloWelt" 
         classpath="${cp}" 
         fork="yes" />
  <java  classname="HalloCons" 
         classpath="${cp}" 
         fork="yes" />
</target>

<target name="jar" depends="vorher" >
  <jar jarfile="../jas-${DSTAMP}.jar"  >
     <fileset dir="." includes="**/*.java"  />
     <fileset dir="." includes="jas-log.html"  />
     <fileset dir="." includes="build.xml Makefile"  />
     <fileset dir="edu/jas" />
  </jar>
</target>

<target name="clean" >
  <delete verbose="true" >
    <fileset dir="${src}" defaultexcludes="no" includes="**/*~"  />
  </delete>
</target>

</project>

Aufruf:

     ant target
     ant compile
     ant doc

Ergebnis des Compilierens:

Buildfile: build.xml
vorher:
depend:
   [depend] Deleted 0 out of date files in 0 seconds
compile:
    [javac] Compiling 4 source files to /v04
BUILD SUCCESSFUL
Total time: 3 seconds

Ergebnis des Erzeugens der Dokumentation:

Buildfile: build.xml
doc:
  [javadoc] Generating Javadoc
  [javadoc] Javadoc execution
  [javadoc] Loading source file /v04/Konto.java...
  [javadoc] Loading source file /v04/ComplexTest.java...
  [javadoc] Loading source file /v04/Complex.java...
  [javadoc] Loading source file /v04/Card.java...
  [javadoc] Constructing Javadoc information...
  [javadoc] Standard Doclet version 1.4.2
  [javadoc] Building tree for all the packages and classes...
  [javadoc] Building index for all the packages and classes...
  [javadoc] Building index for all classes...
BUILD SUCCESSFUL
Total time: 2 seconds

Erzeugte Dokumentation.

Aufbau einer Build-Datei

Das Projekt
<project name="pk1" default="target" > 
...
</project>

genau ein project-Element pro Datei

Targets, Ziele/Aufgaben
<target name="compile" depends="vorher" > 
...
</target>

die target-Elemente definieren die einzelnen Aufgaben

Properties, Konstanten
<property name="srcDir" value="." /> 

die property-Elemente definieren Konstanten, die an anderen Stellen mit ${srcDir}, ${...} verwendet werden können

  <javac srcdir="${srcDir}" ... /> 

Es gibt diverse eingebaute Properties, z.B. ant.java.version, ant.file, buildt.compiler

Tasks, Kommandos
<javac srcdir="${src}" destdir="${build}" 
       classpath="${cp}" />

task-Elemente gibt es für alle eingebauten Kommandos und ausführbaren Programme, zum Beispiel

Jede Task / Kommando wird über (viele) Attribute und Inhaltselemente gesteuert.

Inhaltselemente von Tasks
<fileset dir="." includes="**/*.java" />
<fileset dir="${src}" includes="**/*~" defaultexcludes="no" />

mit fileset können Teilmengen von Dateien gebildet werden

<classpath>
  <pathelement location="dir/name.ext" />
  <pathelement path="p1,p2,p3" />
</classpath>

mit dem classpath Element kann der Classpath Stück für Stück aufgebaut werden

<patternset id="bezeichner" >
  definitionen
</patternset>

patternset mit dem Attribut id dient zum Definieren von (Datei-)Mustern.

<patternset refid="bezeichner" />

patternset mit dem Attribut refid dient zur Verwendung eines schon definierten (Datei-)Musters.

Verschiedenes

Eine XML DTD für die Build-Datei und Ant Version kann man sich mit der Task antstructure erzeugen.


© Universität Mannheim, Rechenzentrum, 2000-2005.

Heinz Kredel

Last modified: Mon Jan 23 23:05:14 CET 2006