Maven Multi-Project mit Scala-Projekten erstellen

Ab einer gewissen Projektkomplexität ist es sinnvoll, Teilprojekte zu erstellen. Das gilt natürlich auch für die Software-Entwicklung mit Maven.

Obwohl es doch einfach sein sollte, in Eclipse ein solches Maven-Multi-Projekt zusammen mit Teilprojekten zu erstellen, gibt es einige Stolperfallen hierbei. In diesem Artikel möchte ich in einfachen Schritten das Vorgehen darstellen.

Maven Root Projekt erstellen

Zuerst erstellen wir ein leeres Maven Projekt. Über das Menü File > New > Other... rufen wir den Wizard Maven Project auf.

MMP001 - Select a wizard - Maven Project

Im ersten Schritt müssen wir den Speicherort des Projekts angeben. Wichtig: die Option „Create a simple Project“ sollte nicht ausgewählt sein.

MMP002 - New Maven project - Default

Dann soll ein Archetyp, also eine Vorlage für ein Maven Projekt, ausgewählt werden. Diese Vorlage ist in der Regel nicht im Katalog „Nexus Indexer“ enthalten.

MMP003 - New Maven project - Select archetype

Deshalb müssen wir den richtigen Archetype über den Button Add Archtype einfügen.

MMP004 - Add archetype

Für ein leeres (Wurzel-)Projekt in Maven kann der folgende Archetype verwendet werden:

Group IDorg.codehaus.mojo.archetypes
Artifact IDpom-root
Version1.1

Dann muss unser neuer Archetype in der Dialogliste ausgewählt werden.

MMP005 - New Maven project - Choose pom-root

Im nächsten Dialog geben wir die Daten für ein Maven Projekt ein: Group Id, Artifact Id und Version. Das Package wird mit der Kombination aus Group Id und Artifact Id vorbelegt, kann aber verändert werden.

MMP006 - New Maven project - Parameters

Dann kann der Wizard mit Finish beendet werden und das Projekt wird erstellt.

MMP007 - Pom Root - Project structure

Die zugehörige POM-Datei ist minimalistisch und enthält nur die folgenden Elemente:

MMP008 - Pom root - pom

Diese werden wir gleich noch ergänzen, damit sie für alle Unterprojekte verwendet werden.

Scala-Projekt als Maven Module erstellen

Zunächst erstellen wir nun aber ein Unterprojekt – in Maven auch als „Module“ bezeichnet. Dazu müssen wir wieder über das Menü File > New > Other... den Wizard Maven Module aufrufen.

MMP009 - Select a wizard - Maven module

Wenn wir ein Scala-Projekt erstellen wollen, können wir den folgenden Archetype verwenden:

Group IDnet.alchim31.maven
Artifact IDscala-archetype-simple
Version1.5

MMP011 - Add archetype

Wieder wird ein neues Projekt erstellt, dessen Struktur einem klassischen Maven Projekt entspricht. Die Sourcen sind in den Verzeichnissen src/main/scala und src/test/scala zu finden.

MMP014 - Scala - Project structure

Korrekturen an den POM-Dateien vornehemn

Es treten aber einige Fehler auf, die wir nun noch beheben wollen. Zum einen zeig ein Blick in die POM-Datei einige Probleme.

MMP015 - Scala - Pom Errors

Die Einträge für das scala-maven-plugin und das maven-surefire-plugin gehören eigentlich in den Abschnitt <pluginManagement>. Also erstellen wir in der POM des Root-Projekts ein Tag <build> und darin ein Tag für <pluginManagement>. Dann verschieben wir die Einträge <plugins> aus der POM-Datei des Scala-Projekts dorthin. Bei mir war es notwendig, folgenden Kommentar in maven-surefire-plugin zu entkommentieren: useManifestOnlyJar.

Ebenso verschieben wir die Abschnitte <properties> und <dependencies> in die Root-POM.

Wie wir sehen, wird noch das JDK 1.6 verwendet. Hier können wir bei Bedarf in <properties> die maven.compiler.source und das maven.compiler.target auf 1.7 ändern. Außerdem wird von der aktuellen Scala IDE Version 3.0.1 bereits Scala 2.10.2 unterstützt, so dass auch der Eintrag scala.version auf 2.10.2 geändert werden kann.

In den <dependencies> können dann auch die Versionen für Specs2 und ScalaTest auf die aktuellen Versionen gesetzt werden bzw. die Einträge können gelöscht werden, wenn sie nicht für eines der Projekte benötigt werden.

Anschließend sollten wir die Projekte noch aktualisieren. Dazu wird im Kontextmenü eines Projekts das Menü Maven > Update Project... aufgerufen.

Jetzt können wir testen, ob alles funktioniert, indem wir im Kontext-Menü des Scala-Projekts Run As > Maven Test auswählen und warten, bis Maven alle notwendigen Abhängigkeiten aufgelöst und aus dem Internet geladen hat. Es sollten alle Test erfolgreich ausgeführt werden.

Um sich das Leben noch etwas leichter zu machen, können wir in Eclipse dem Scala Projekt auch eine Scala Nature mitgeben. Hierzu müssen wir nur im Kontextmenü Configure > Add Scala Nature auswählen.

Finale POM-Version

Nach allen oben beschriebenen Änderungen sieht die endgültige Version der POM-Datei im Maven Master Projekt wie folgt aus:


	4.0.0
	de.praxisit.maven
	de.praxisit.maven.test
	0.0.1-SNAPSHOT
	pom
	de.praxisit.maven.test
	
		de.praxisit.maven.scala
	

	
		1.7
		1.7
		UTF-8
		2.10
		2.10.2
	

	
		
			org.scala-lang
			scala-library
			${scala.version}
		

		
		
			junit
			junit
			4.11
			test
		
		
			org.scalatest
			scalatest_${scala.tools.version}
			2.0.M6-SNAP8
			test
		
	


	
		
			
				
					
					net.alchim31.maven
					scala-maven-plugin
					3.1.3
					
						
							
								compile
								testCompile
							
							
								
									-make:transitive
									-dependencyfile
									${project.build.directory}/.scala_dependencies
								
							
						
					
				
				
					org.apache.maven.plugins
					maven-surefire-plugin
					2.13
					
						false
						true
						
						false
						
							**/*Test.*
							**/*Suite.*
						
					
				
			
		
	

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.