UTF-8 kodierte Java-Builds mit Maven

Um möglichst systemunabhängig zu sein, sollte man seinen Code im UTF-8 Zeichensatz speichern. Beachtet man das nicht, meldet Maven beim Buildvorgang möglicherweise folgende Warnung:

Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!

Um den UTF-8 Zeichensatz in Maven zu erzwingen, muss die Eigenschaft project.build.sourceEncoding in der Konfigurationsdatei pom.xml gesetzt werden. Wer Analyse-Tools wie Cobertura einsetzt, der sollte außerdem noch die Eigenschaft project.reporting.outputEncoding auf UTF-8 setzen, damit die Logfiles ebenfalls mit UTF-8 kodiert werden.

Beispiel

1
2
3
4
5
6
7
8
9
10
<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/maven-v4_0_0.xsd">
  ...
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  </properties>
  ...
</project>

Mehrere externe JARs in eine JAR einbinden

Das Einbinden von externen JAR-Bibliotheken in der eigenen JAR ist mit einem Apache Ant Build-Task recht einfach. Für mein Beispiel verweise ich auf dieses [post id=2583]Ant Build Skript[/post]. Mit nur einer weiteren Zeile (Zeile Nummer 6) kann man die build.xml so erweitern, dass alle externen Bibliotheken aus dem /lib-Verzeichnis in die eigene JAR gepackt werden:

1
2
3
4
5
6
7
<jar destfile="${jar.dir}/${ant.project.name}-${app.version}.jar" basedir="${classes.dir}">
	<manifest>
		<attribute name="Main-Class" value="${main.class}" />
		<attribute name="Class-Path" value="${manifest.class.path}" />
	</manifest>
	<zipgroupfileset dir="${lib.dir}/."/>
</jar>

Das zipgroupfileset unterstützt alle Attribute des <fileset>, wodurch über folgenden Befehl einzelne Dateien ausgeschlossen werden können:

1
<zipgroupfileset dir="${lib.dir}/." excludes="junit-4.8.2.jar" />

Für weitere Infos verweise ich auf den Beitrag „NetBeans – deploying all in one jar“ von stackoverflow.

Beispiel für Apache Ant Build Script

In letzter Zeit habe ich viel mit Apache Ant Build-Skripten zu tun. Bei richtiger Konfigurationen bringt Apache Ant einen erheblichen Vorteil bei der Erstellung von Java-Projekten, unabhängig von Betriebssystem und IDE. Um Anfängern den Einstieg in Ant zu erleichtern, habe ich eine Vorlage für eine build.xml mitsamt build.properties erstellt, die beliebig erweitert werden kann.

In NetBeans kann man mit einem Java Free-Form Project das eigene Build-Skript benutzen.
Beispiel für Apache Ant Build Script weiterlesen