Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Ein beliebter Einstieg in eine Programmiersprache ist das "HelloWorld" Programm. Das ist das einfachstmögliche Programm, das den Text "Hello, world!" auf der Konsole ausgibt. Im allgemeinen ist es nur wenige Zeilen lang. In Basic heißt es etwa

10 PRINT "Hello, world!".

In Java ist das schon komplizierter, hier sieht es etwa so aus:

No Format
Datei App.java:
package de.schirmacher;

public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}

...

Maven benötigt noch zwei zusätzliche Parameter namens groupId und artifactId. Die artifactId ist üblicherweise der Name des Programms oder Moduls, die groupId ist meistens eine übergeordnete Bezeichnung wie ein Firmen- oder Projektname. Da die groupId weltweit eindeutig sein sollte, hat sich also Konvention die Verwendung eines Domainnamens eingebürgert.

...

Nach einer gewissen Wartezeit und dem Download von etlichen MByte wird ein Directory mit allen für Maven erforderlichen Dateien angelegt. Wir können jetzt unser HelloWorld Programm automatisch testen und bauen. Dazu wechseln wir in das neu generierte Verzeichnis und geben mvn package ein. Dieser Vorgang lädt einige weitere MByte, führt ggf. vorhandenen Test-Code aus und erzeugt ein distributable:

No Format

C:\dev>cd helloworld
C:\dev\helloworld>mvn package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building helloworld
[INFO]    task-segment: [package]
[INFO] ------------------------------------------------------------------------
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.2/maven-resources-plugin-2.2.pom
1K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/1/maven-plugins-1.pom
3K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/maven/maven-parent/1/maven-parent-1.pom
6K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/apache/1/apache-1.pom
3K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.2/maven-resources-plugin-2.2.jar
13K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/2.0.2/maven-compiler-plugin-2.0.2.pom
2K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/8/maven-plugins-8.pom
5K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/maven/maven-parent/5/maven-parent-5.pom
14K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/2.0.2/maven-compiler-plugin-2.0.2.jar
17K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.4.2/maven-surefire-plugin-2.4.2.pom
6K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire/2.4.2/surefire-2.4.2.pom
6K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/maven/maven-parent/7/maven-parent-7.pom
20K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.4.2/maven-surefire-plugin-2.4.2.jar
21K downloaded

...

[INFO] Surefire report directory: C:\dev\helloworld\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running de.schirmacher.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

...

[INFO] [jar:jar]
[INFO] Building jar: C:\dev\helloworld\target\helloworld-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 33 seconds
[INFO] Finished at: Fri Sep 11 10:13:57 CEST 2009
[INFO] Final Memory: 7M/18M
[INFO] ------------------------------------------------------------------------

Mit dem mvn package-Befehl wird das Programm in einer jar-Datei verpackt, wie es bei Java üblich ist.

Das Programm kann nun mit folgendem Befehl gestartet werden:

...

Es geht allerdings noch etwas einfacher, indem man in der jar-Datei die Information ablegt, welche Klasse beim Aufruf zu starten ist. Dazu werden folgende zusätzliche Informationen in der pom.xml-Datei benötigt, und zwar gleich hinter den <dependencies>-Abschnitt:

No Format
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>de.schirmacher.App</mainClass>
                            <addClasspath>true</addClasspath>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

Jetzt kann man das HelloWorld-Programm mit java -jar target/helloworld-1.0-SNAPSHOT.jar oder auch mit Doppelklick (abhängig von der Systemkonfiguration) starten.

Falls die jar-Datei kein Manifest enthält, gibt es den folgenden Fehler:

Failed to load Main-Class manifest attribute from helloworld-1.0-SNAPSHOT.jar