maven-2 - type - maven-compiler-plugin




Maven-Variable für die Reaktorwurzel (5)

Gibt es in einem Multi-Modul-Maven-Projekt eine Variable, die auf den Stammordner des Projekts verweist?

  • ${project.basedir} zeigt auf das Verzeichnis des aktuellen Projekts.
  • ${project.parent.basedir} zeigt auf das Verzeichnis des übergeordneten Projekts.

Aber gibt es eine Variable, die immer auf das Wurzelverzeichnis verweist (das Verzeichnis, von dem aus der Befehl maven ausgeführt wurde), unabhängig von welchem ​​Projekt im Reaktor?

Mir wurde klar, dass das Problem, das ich lösen wollte, ziemlich unlösbar ist. Ich wollte eine Variable, die auf project.basedir, project.parent.basedir, project.parent.parent.basedir usw. verweist, je nachdem, welcher Wert höher ist. Da jedoch das übergeordnete Pom eines Projekts nicht das übergeordnete Element im Dateisystem sein muss, hilft mein Ansatz nicht. Deshalb akzeptiere ich Pascals Antwort, weil sie meine Frage beantwortet (auch wenn meine Frage mein Problem nicht löst).


Gibt es eine Variable, die immer auf das Stammverzeichnis verweist (das Verzeichnis, von dem aus der Befehl maven ausgeführt wurde)?

user.dir (das Arbeitsverzeichnis) sollte dieses Verzeichnis sein.


Eine solche Eigenschaft kann erstellt werden mit: directory-maven-plugin . Mit dem highest-basedir Ziel des Plugins können Sie den highest-basedir jeder von Ihnen angegebenen Eigenschaft zuweisen.


Im neuesten Maven können Sie ${maven.multiModuleProjectDirectory} .


In Maven 3 ist ${session.executionRootDirectory} "eine Variable, die immer auf das ... Verzeichnis verweist, von dem aus der Maven-Befehl ausgeführt wurde."

Beachten Sie, dass sich dies von einer Eigenschaft unterscheidet, die das Stammverzeichnis der obersten Ebene eines Projekts mit mehreren Modulen angibt, unabhängig davon, wo in der Verzeichnisstruktur mvn ausgeführt wird. Eine solche Eigenschaft gibt es meines Wissens nicht, aber Sie können den ${basedir}/.. , um sie zu erreichen. Weitere Informationen finden Sie in diesem Thread zu Maven-Usern .

Siehe auch: Ermitteln des Stammverzeichnisses eines Maven-Reaktorprojekts mit mehreren Modulen


Verwenden Sie Directory-Maven-Plugin mit Zielverzeichnis .

Im Gegensatz zu anderen Vorschlägen:

  • Diese Lösung funktioniert für Projekte mit mehreren Modulen.
  • Es funktioniert unabhängig davon, ob Sie das gesamte Projekt oder ein Untermodul erstellen
  • Es funktioniert unabhängig davon, ob Sie maven vom Stammordner oder einem Untermodul aus ausführen (im Gegensatz zu $ ​​{session.executionRootDirectory}).
  • Es ist nicht erforderlich, in jedem Submodul eine relative Pfadeigenschaft festzulegen.

Mit dem Plugin können Sie eine Eigenschaft Ihrer Wahl auf den absoluten Pfad aller Module des Projekts setzen. In meinem Fall habe ich es auf das Wurzelmodul gesetzt ... In meinem Projekt root pom:

 <plugin>
                <groupId>org.commonjava.maven.plugins</groupId>
                <artifactId>directory-maven-plugin</artifactId>
                <version>0.1</version>
                <executions>
                    <execution>
                        <id>directories</id>
                        <goals>
                            <goal>directory-of</goal>
                        </goals>
                        <phase>initialize</phase>
                        <configuration>
                            <property>myproject.basedir</property>
                            <project>
                                <groupId>com.my.domain</groupId>
                                <artifactId>my-root-artifact</artifactId>
                            </project>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

Von da an hat $ {myproject.basedir} in jedem Submodul pom immer den Pfad des Projekt-Root-Moduls. Natürlich können Sie die Eigenschaft auch auf ein beliebiges Modul setzen, nicht nur auf das Stammverzeichnis.







maven-2