# Erstellen eines Maven Projektes mit Eclipse



## Guest (30. Okt 2008)

Hallo,

ich arbeite mit dem Eclipse Plugin "m2eclipse". Ich habe eine Frage bezüglich des Erstellens eines Mavenprojektes mit dem entsprechenden Wizard.

Wenn ich mir solch ein Projekt erstelle, dann muss ich ja zunächst einen existierenden "Archetype" aus der Liste wählen. Dieser "Archetype" hat sowohl eine "GroupID" als auch eine "ArtifactID". Wenn ich anschließend auf next klicke, muss ich die "GroupID" und die "AritfactID" erneut eingeben. 

Könnt ihr mir sagen, warum ich die "GroupID" und die "ArtifactID" erneut eingeben muss, obwohl ich sie doch eigentlich bereits durch die Auswahl des entsprechenden "Archetype" bereits festgelegt habe.

Bisher stelle ich mir das so vor (bitte verbessern):

Zunächst wird eine Kopie der Struktur des gewählten "Archtypes" im lokalen workspace gemacht. Da das Projekt nun alleredings lokal entwickelt wird müssen die "GroupID" und die "ArtifactID" auch auf die eigenen Bedürfnisse angepasst werden. Ich erhalte also lokal ein Kopie des Templates das auf dem Repository gespeichert ist, und passe hier nur die "GroupID" und die "ArtifactID" an. Ist diese Denkweise richtig?


----------



## maki (30. Okt 2008)

Das ist ken Fehler, das ist richtig so.

Archetypes sind so etwas wie Schablonen (Templates).

Du verwechselst die GroupId und ArtfactId des Archetypes selbst mit den Werten die du für dein erzeugtes Projekt verwenden möchtest.


----------



## Guest (30. Okt 2008)

Noch zwei Fragen:

1.)
Im Wizard werden mir nur die Archetypes des lokalen Repositorys angezeigt. Die Archtype des Remote Repository die mir der "Nexus Indexer" anzeigen müßte werden nicht gefunden. Woran kann das liegen?

2.)
Im Wizard hat man die Möglichkeit eine Version festzulegen. Was gebe ich denn hier an 1.0? Ist das für die Weiterentwicklung meines eigenene Templates da? Wenn ich z.B. irgendwann die Struktur ändere, dann zähle ich auf 1.1 hoch und sagen allen Leuten die mit mir arbeiten, dass sie jetzt auch das neue Template nutzen sollen?


----------



## maki (30. Okt 2008)

1. Sag bescheid wenn du es rausfindest, ist bei mir auch so, wenn es auch nicht schlimm ist, Kommandozeile geht immer.

2. Du wirst wohl kaum eigene Archetypes erstellen am Anfang, die Version bezieht sich wieder auf dein Projekt.


----------



## Guest (30. Okt 2008)

Welches Template nutzt ich denn am besten für mein Vorhaben? Du weißt schon die Geschichte mit dem dynamischen Webprojekt (Hibernate, Oracle, Servlets, JSP', CSS usw.)



> 1. Sag bescheid wenn du es rausfindest, ist bei mir auch so, wenn es auch nicht schlimm ist, Kommandozeile geht immer.



 Jetzt bin ich aber erleichert. Ich dachte schon du weißt ALLES. Wenn ich's rausfinde sag ich bescheid.


----------



## maki (30. Okt 2008)

>> Welches Template nutzt ich denn am besten für mein Vorhaben? Du weißt schon die Geschichte mit dem dynamischen Webprojekt (Hibernate, Oracle, Servlets, JSP', CSS usw.) 

Kenne keines welches das alles erfült, gibt genug für Webapps, viele mit JPA Unterstützung, doch entweder für JSF, Spring MVC oder für struts.

Und womit machst du deine Webapp?


----------



## Guest (31. Okt 2008)

mmm bin gerade es verwirrt.

Momentan stelle ich mir das Vorgehen so vor:

1.) 
Mit dem Wizard erstelle ich mir eine neues Maven-Projekt.

2.) 
Um das Maven-Projekt nicht händisch erstellen zu müssen, kann ich mir eines aus der zentralen Maven-Repository nehmen (welches meinen Anforderungen am ehesten entspricht).

3.)
Nun wird es wohl kaum so sein, dass das Maven-Projekt aus der Repository genau meinen Anforderungen entspricht. Demnach muß ich die pom.xml des Maven-Projektes so anpassen, dass sie genau meinen Anforderungen entspricht. Das würde dann z.B. heißen das einige Dependencys gelöscht und andere neu hinzugefügt werden müssen.

Hierzu ein paar Fragen:

1.)
Ist die Denkweise die ich oben erläutert habe so korrekt?

2.)
Von der zentralen bzw. der lokalen Repository werden eine ganze Menge Archetypes zur Verfügung gestellt. Wo kann ich denn nachlesen bzw. wie kann ich herausfinden, welche dieser Archtypes dem Projekt das ich umsetzen will am nächsten kommt. Ziel ist es ja möglichst wenig Modifikationen an der pom.xml durchführen zu müssen.

3.)
Mal angenommen ich habe meine pom.xml meinen Wünschen entsprechend angepasst. Was muss ich denn dann tun, damit Eclipse mein Maven-Projekt bezüglich der neuen pom.xml anpasst. Geht das automatisch oder ist dazu eine expliziete Handlung notwendig?


----------



## maki (31. Okt 2008)

1. Ist ok.

2. Die Beschreibung /Titel) durchlesen oder einfach mal ausprobieren, schadet nicht zu sehen wie Maven2 Projekte von anderen aufgesetzt werden 

3. Mit dem m2 Plugin, refresh project configuration, macht er aber meist eh automatisch.

Wenn du zB. nur Hibernate ohne JPA nutzen möchtest, reicht eine einzige Dependency, dafür lohnt sich kein Archetype


----------



## Guest (31. Okt 2008)

> Wenn du z.B. nur Hibernate ohne JPA nutzen möchtest, reicht eine einzige Dependency, dafür lohnt sich kein Archetype



Wenn ich dich richtig verstehe, würdest du in diesem Fall die pom.xml selbst schreiben und keinen Archetype verwenden?

Das heißt du würdest dir auch die entsprechende Verzeichnisstruktur selbst erstellen oder? Wenn du dich bei der Erstellung dieser Struktur nicht an bestimmte Konventionen hälst (wie z.B. in einem existierenden Archtype festgelegt) zerstörst du doch im Prinzip den ganzen Sinn von Maven (Erzeugung definierter Strukturen die bestimmte Konventionen befolgen, anhand von Archtypes zu die jeweiligen Projekttypen). Naja der Vorteil des Dependencymanagements wäre schon noch vorhanden... aber trotzdem sollte man sich nicht immer auf bestehende Archetype beziehen?

PS: Wie willst du denn Hibernate ohne JPA nutzen. Ich dachte JPA ist die Spezifikation die Hibernate implementiert, genauso wie JPOX JDO implementiert?


----------



## maki (31. Okt 2008)

> Wenn ich dich richtig verstehe, würdest du in diesem Fall die pom.xml selbst schreiben und keinen Archetype verwenden?


Wenn du bereits ein Pojekt(-archetype) hast und Hibernate zusätzlich brauchst, ist die Dependency einfacher, der Rest ist doch schon da.



> Das heißt du würdest dir auch die entsprechende Verzeichnisstruktur selbst erstellen oder?


Nee, aber zumindest solltest du Wissen wie sie aussieht, die Verzeichnisstruktur.



> Wenn du dich bei der Erstellung dieser Struktur nicht an bestimmte Konventionen hälst (wie z.B. in einem existierenden Archtype festgelegt) zerstörst du doch im Prinzip den ganzen Sinn von Maven (Erzeugung definierter Strukturen die bestimmte Konventionen befolgen, anhand von Archtypes zu die jeweiligen Projekttypen). Naja der Vorteil des Dependencymanagements wäre schon noch vorhanden..


Wenn man sich in einem neuen Projekt nicht an die Konventionen hält, hat man Maven2 nicht verstanden.
Die Ordnerstruktur ist übrigens immer glcieh, egal um welche Projektart es sich handelt, nur manchmal hat man eben mehr Ordner, manchmal weniger, je nach Projekttyp.
Bei einem WAR Projekt zB. gibt es einen zusätzlichen Ordner unter src/main/webapp, in dem die Webresosurcen drinnen sind.
Bei einem JAR Projekt wird man den wohl kaum brauchen 



> PS: Wie willst du denn Hibernate ohne JPA nutzen. Ich dachte JPA ist die Spezifikation die Hibernate implementiert, genauso wie JPOX JDO implementiert?


JPOX Implementiert JPA und JDO, die JPA Referenzimplementierung ist übrigens TopLink.

Man kann JPA mit Hibernate oder Toplink oder JPOXnutzen, aber Hibernate auch komplett ohne JPA.


----------

