Ausführbare jar-Datei mittels Maven generieren

Für bestimmte Java-Projekte ist es durchaus praktisch als Ergebnis eine jar-Datei inklusive der benötigten Abhängigkeiten zu generieren. So kann das Projekt in Form einer einzelnen Datei unkompliziert ausgeliefert werden. Mittels Maven lässt sich dies relativ einfach bewerkstelligen. Dabei wird eine Basis-POM (pom.xml) benötigt, in welcher das Plugin maven-assembly-plugin konfiguriert wird:

<plugin>
	<artifactId>maven-assembly-plugin</artifactId>
	<version>3.1.0</version>
	<configuration>
		<archive>
			<manifest>
				<mainClass>com.example.webservice.Webservice</mainClass>
			</manifest>
		</archive>
		<descriptorRefs>
			<descriptorRef>jar-with-dependencies</descriptorRef>
		</descriptorRefs>
	</configuration>
</plugin>

Soll nach erfolgter Entwicklung die jar-Datei mit den Abhängigkeiten erzeugt werden, muss das Kommando:

mvn clean compile assembly:single

genutzt werden. Damit das Ganze auch beim gewöhnlichen:

mvn package

funktioniert, muss die pom.xml angepasst werden. Dabei wird zur Plugin-Definition ein executions-Block hinzugefügt, welcher dafür sorgt das dass Ziel single auch während der Phase package ausgeführt wird. Die komplette pom.xml sieht dann wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>webservice</artifactId>
    <version>1.0.0</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.example.webservice.Webservice</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Alle im dependencies-Block verwendeten Abhängigkeiten, werden somit in die jar-Datei übernommen.

Aktuelle Datei im Projektbaum in IntelliJ IDEA lokalisieren

Bei der Nutzung einer IDE, in diesem Fall IntelliJ IDEA, hat man öfter das Problem, das man bei der Bearbeitung einer bestimmten Datei in das entsprechende Verzeichnis bzw. die Stelle in der Project View wechseln möchte.

Über das Select In kann die Projekt View aufgerufen werden

Dazu muss im Editor-Fenster die Tastenkombination Alt + F1 gedrückt werden. Damit öffnet sich das Select In. In diesem kann nun der erste Punkte mit dem Namen Project View mittels der Enter-Taste ausgewählt werden. Anschließend wird der aktuelle Ort der Datei in der Project View angezeigt.

Maven-Unterstützung zu einem IntelliJ IDEA Projekt hinzufügen

Wenn man unter IntelliJ IDEA eine Java-Projekt ohne Maven-Unterstützung geladen hat und eine solche benötigt, so kann man diese manuell hinzufügen. Dazu reicht es eine pom.xml Datei dem Projekt hinzuzufügen:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>TestProject</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>

Einfacher und schneller kann das ganze allerdings mit den Bordmitteln von IntelliJ IDEA gelöst werden.

Die Unterstützung für Maven kann einfach hinzugefügt werden

Die Unterstützung für Maven kann einfach hinzugefügt werden

Dazu muss mit der rechten Maustaste auf das Projekt geklickt werden. Dort wird der Punkt Add Framework support… ausgewählt. Anschließend öffnet sich ein Fenster in dem das gewünschte Framework ausgewählt werden kann. Wählt man hier Maven aus und bestätigt das ganze mit dem OK-Button wird eine pom.xml Datei für das Projekt erzeugt und die IDE erkennt automatisch, das es sich nun um ein Maven-Projekt handelt.

Scrivener Template importieren

Gestern hatte wolle ich eine Projektvorlage in Scrivener importieren. Dazu öffnete ich die scrivtemplate-Datei mittels Scrivener. Anschließend teilte Mac OS X mir mit das die Scrivener-App keine Dateien vom Typ scrivtemplate verarbeiten kann. Das verwundert im ersten Moment natürlich, da die Dateien speziell für Scrivener erstellt wurden.

Der "Neues Projekt"-Dialog unter Scrivener

Der “Neues Projekt”-Dialog unter Scrivener

Statt der intuitiven Variante muss man leider anders vorgehen. Im ersten Schritt wird Scrivener gestartet. Anschließend wird der Neues Projekt-Dialog aufgerufen. In dem Dialog gibt es links unten einen Button mit dem Titel Optionen. In dem sich öffnenden Submenü gibt es dann den Punkt Vorlagen importieren. Mit dieser Funktion kann die scrivtemplate-Datei importiert werden und danach im Neues Projekt-Dialog genutzt werden.

Einem iOS Xcode Projekt eine Bibliothek hinzufügen

Es gibt die einfache Art und die nicht ganz so einfache Art. So ist es zum Beispiel unter C# ziemlich einfach eine Bibliothek zu einem Projekt hinzuzufügen und diese anschließend zu benutzen. Also was liegt näher als das gleiche unter Objective C mittels Xcode zu versuchen.

Und dort merkt man dann das Objective C ein Superset von C ist. Es ist leider nicht ganz so einfach wie man es sich wünscht. Aber fangen wir von vorne an. Gegeben seien zwei Projekte:

  • Taschenrechner (iOS App)
  • LibCore (Cocoa Touch Bibliothek)

Die Bibliothek “LibCore” soll dabei dem Projekt “Taschenrechner” hinzugefügt werden, damit man dieses die entsprechenden Funktionen nutzen kann. Unter Objective C gibt es Frameworks und Bibliotheken. Frameworks können auf den iOS Geräten nicht benutzt werden, damit bleiben nur noch statische Bibliotheken.

Die Einstellungen für die Suchpfade

Im ersten Schritt müssen im Projekt die Suchpfade definiert werden. Dazu gehen wir in die Projekteinstellungen in den Punkt “Build Settings” und suchen dort nach “Header”. Die Suche wird dann den Punkt “Header Search Paths” finden. Dort tragen wir den Pfad zur entsprechenden Bibliothek ein.

Nun werden Headerdateien welche mittels:

#import "LibCore.h";

eingebunden werden vom Compiler gefunden. Beim Linker kommt es allerdings noch zu Fehlern. Deshalb ziehen wir das Projekt (die “LibCore.xcodeprj”) auf unserer Taschenrechnerprojekt. Dadurch ist dieses Projekt nun ein “Unterprojekt” von Taschenrechner. In den Projekteinstellungen suchen wir nun den Tab “Build Phases” auf “Link Binary With Libraries” und fügen dort die “LibCore.a” hinzu.

Die Bibliothek wird dem Linker bekannt gemacht

Danach sollte das Projekt mit der Bibliothek ohne Probleme kompilieren.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Xcode
http://de.wikipedia.org/wiki/Objective_C