2009-07-09 6 views
2

Das Projekt ist eine Bibliothek, die den Kernbibliothekscode, Tests und Beispielcode enthält. Am Ende des Build-Prozesses sollten die folgenden Archive erstellt werden:Beispielcodearchiv mit Maven

  • xy-1.1.0-core.jar
  • xy-1.1.0-tests.jar
  • xy-1.1.0-examples.jar

Was ist der beste Weg, dies mit Maven einzurichten? Derzeit ist das Setup ist:

src 
src/main/java 
src/examples/java 
src/test/java 

Zusätzlich sollte es eine lib Verzeichnis alle Abhängigkeiten enthält. Die xy-jars, die Bibliotheks-jars und andere Skripts sollten in eine Release-Datei xy-1.1.0.tar.gz gepackt werden.

+0

Ich stimme nicht zu, dass diese Frage nicht konstruktiv ist - ich fand die Antworten hilfreich w/r/t die Optionen, die Sie in Maven Konventionen zur Verfügung haben. Denken Sie, dies könnte ein Fall von über aggressiver Mäßigung sein. – cwash

Antwort

5

Einer der großen Vorteile von Maven (oder Nachteile, je nachdem, mit wem Sie sprechen) ist "Convention over Configuration" - das heißt, wenn Sie die Wahl haben, Ihre App in Maven zu crowbar oder versuchen, Maven zu crowbar zu deiner App - es ist generell einfacher, deine App in Maven zu verwandeln.

Es wird wahrscheinlich einfacher sein, Ihr einzelnes "Projekt" in zwei Maven-Projekte zu zerlegen - Kern und Beispiele. Maven behandelt ein "Projekt" als etwas, das ein einzelnes Artefakt erzeugt - aka JAR-Datei, WAR-Datei, EAR-Datei, etc. (Es gibt einige Ausnahmen - wie das Test-Jar, aber dazu kommen wir später.) Es wird wahrscheinlich einfacher sein, "Beispiele" als ein Modul, ein Unterprojekt oder ein separates Projekt zu behandeln, das vom "Kern" -Projekt abhängig ist.

Enthält der Teil "Tests" nur Tests für "Kern" oder "Kern" und "Beispiele"? Wenn es sich nur um den Kern handelt, sollten Sie dies in das Testverzeichnis des Hauptprojekts verschieben. Wenn es beides ist, müssen Sie es teilen und Komponententests in das entsprechende Projekt verschieben.

Sie können eine JAR des Testcodes eines Projekts generieren, indem Sie das maven-jar-plugin wie in guide to attached tests beschrieben konfigurieren.

Maven behält alle Abhängigkeiten aller Programme, die durch Maven im "local repository" erstellt wurden - allgemein gespeichert in vielen Verzeichnissen unter% user_directory% /. M2 - Sie können Maven dazu bringen, alle Abhängigkeiten Ihres Projekts in einen angegebenen zu kopieren Verzeichnis unter Verwendung der Abhängigkeit: Kopierabhängigkeiten wie auf der dependency plugin page beschrieben.

Um den endgültigen Teer zu bauen, werden Sie ein Assembly mit den vorherigen Projekten bauen.

2

Nate deckte diesen größtenteils ab, aber ich gebe konkrete Beispiele.

Hier ist, wie Sie Ihre Verzeichnisstruktur sollte wie folgt aussehen:

pom.xml 
src/main/assembly/assembly.xml 
core/pom.xml 
core/src/main/java/... 
core/src/test/java/... 
examples/pom.xml 
examples/src/main/java/... 

In der Basis pom, werden Sie Ihre Submodule bezeichnen wie folgt:

<modules> 
    <modules>core</modules> 
    <modules>examples</modules> 
</modules> 

Angenommen, Ihre Basis groupId ist „com.company .Beispiel“und Ihre artifactId ist‚xy‘, dann wird Ihr Modul Poms mit den folgenden (Einstellung für Namen und Versionen, natürlich) beginnen:

<parent> 
    <groupId>com.company.example</groupId> 
    <artifactId>xy</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
</parent> 
<groupId>com.company.example</groupId> 
<artifactId>xy-core</artifactId> 
<version>1.0.0-SNAPSHOT</version> 

die Montage läuft im Basisprojekt Um sicher zu gehen, sind die folgendes in Ihrer Build-Konfiguration:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
    <execution> 
     <goals> 
     <goal>jar</goal> 
     <goal>test-jar</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

die assembly.xml selbst wi:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
    <descriptors> 
     <descriptor>src/main/assembly/assembly.xml</descriptor> 
    </descriptors> 
    </configuration> 
</plugin> 

, auch einen separaten Behälter für die Testklassen, fügen Sie diese auf den Kern/pom.xml-Datei zu erstellen werde so aussehen:

<assembly> 
    <id>assembly</id> 
    <formats> 
    <format>tar.gz</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <moduleSets> 
    <moduleSet> 
     <binaries> 
     <dependencySets> 
      <dependencySet> 
      <outputDirectory>lib</outputDirectory> 
      </dependencySet> 
     </dependencySets> 
     <outputDirectory>lib</outputDirectory> 
     </binaries> 
    </moduleSet> 
    </moduleSets> 
</assembly> 

Ich vermisse wahrscheinlich ein paar Dinge hier, aber das ist die allgemeine Idee.