46 Stimmen

Wie kann man aktive Untermodule in einem Maven-Projekt auflisten?

Ich habe ein komplexes Projekt, in dem es viele Verzeichnisse gibt, die POM-Dateien enthalten, von denen jedoch nur einige (möglicherweise vorübergehend) Untermodule eines bestimmten übergeordneten Projekts sind.

Offensichtlich kennt Maven die Liste der relevanten Dateien, da es alle <module> Tags, um sie zu finden. Aber ich sehe nur eine Liste der <name> s in den [INFO]-Kommentaren, nicht die Pfade zu diesen Modulen.

Gibt es eine Möglichkeit, Maven eine Liste aller POM-Dateien ausgeben zu lassen, die Referenzen auf Projekte enthalten, die Teil des Reaktor-Builds für ein bestimmtes Projekt sind?

4voto

Eugene Lopatkin Punkte 1855

Genaue Bezeichnung erhalten. Nicht ID. Das Ergebnis ist geeignet für mvn -pl .

mvn help:evaluate -Dexpression=project.modules -q -DforceStdout | tail -n +2 | head -n -1 | sed 's/\s*<.*>\(.*\)<.*>/\1/'

oder mit Haupt pom.xml

cat pom.xml | grep "<module>" | sed 's/\s*<.*>\(.*\)<.*>/\1/'

1voto

Pascal Thivent Punkte 548176

Ich habe keine direkte Antwort auf diese Frage. Aber die Verwendung einer Art von "Modulpfad" als Namenskonvention für die <name> meiner Module funktioniert für mich. Wie Sie sehen werden, ist diese Konvention selbsterklärend.

Gegeben ist die folgende Projektstruktur:

.
 pom
    pom.xml
    release.properties
 pom.xml
 samples
    ejb-cargo-sample
       functests
          pom.xml
          src
       pom.xml
       services
           pom.xml
           src
    pom.xml
 tools
     pom.xml
     verification-resources
         pom.xml
         src

Hier ist die Ausgabe eines Reaktorbaus:

$ mvn compile
\[INFO\] Scanning for projects...
\[INFO\] Reactor build order: 
\[INFO\]   Personal Sandbox - Samples - Parent POM
\[INFO\]   Personal Sandbox - Samples - EJB3 and Cargo Sample
\[INFO\]   Personal Sandbox - Tools - Parent POM
\[INFO\]   Personal Sandbox - Tools - Shared Verification Resources
\[INFO\]   Personal Sandbox - Samples - EJB3 and Cargo Sample - Services
\[INFO\]   Personal Sandbox - Samples - EJB3 and Cargo Sample - Functests
\[INFO\]   Sandbox Externals POM
...

Das gibt IMHO einen sehr guten Überblick über das, was passiert, skaliert richtig und es ist ziemlich einfach, jedes Modul im Dateisystem zu finden, falls es Probleme gibt.

Ich bin mir jedoch nicht sicher, ob dies alle Ihre Anforderungen erfüllt.

1voto

cbliard Punkte 6621

Ich hatte das gleiche Problem, konnte es aber ohne strace . Die mvn exec:exec Plugin wird verwendet, um touch pom.xml in jedem Projekt, und dann find die kürzlich geänderte pom.xml Dateien:

ctimeref=`mktemp`
mvn --quiet exec:exec -Dexec.executable=/usr/bin/touch -Dexec.args=pom.xml
find . -mindepth 2 -type f -name pom.xml -cnewer "$ctimeref" > maven_projects_list.txt
rm "$ctimeref"

Und Sie haben Ihre Projektliste in der maven_projects_list.txt Datei.

0voto

VictorRos Punkte 11

Dies ist die Befehl Ich verwende für die Auflistung aller pom.xml Dateien innerhalb eines Projekts an der Wurzel des Projekts.

find -name pom.xml | grep -v target | sort

Was der Befehl bewirkt:

find -name pom.xml was ich suche

grep -v target pom.xml im Verzeichnis target/ nicht auflisten

sort das Ergebnis in alphabetischer Reihenfolge auflisten

0voto

TapakSakti Punkte 1

Ein Beispiel für die Auflistung aller Module und der übergeordneten Module

export REPO_DIR=$(pwd)
export REPO_NAME=$(basename ${REPO_DIR})

echo "${REPO_DIR} ==> ${REPO_NAME}"

mvn exec:exec -q \
  -Dexec.executable='echo' \
  -Dexec.args='${basedir}:${project.parent.groupId}:${project.parent.artifactId}:${project.parent.version}:${project.groupId}:${project.artifactId}:${project.version}:${project.packaging}' \
  | perl -pe "s/^${REPO_DIR//\//\\\/}/${REPO_NAME}/g" \
  | perl -pe 's/:/\t/g;'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X