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?

0voto

Zana Simsek Punkte 89

Ich habe das folgende Skript als mvn exec:exec läuft langsam auf Gitlab. Ich konnte keine Zeit finden, um es genauer zu untersuchen, aber ich habe den Verdacht, dass es versucht, einen neuen Runner zu bekommen, da es einen neuen Runtime . Wenn Sie also mit einer begrenzten Anzahl von Läufern arbeiten, wirkt sich das in unvorhersehbarer Weise auf die Gesamtbauzeit aus, wenn Sie mvn exec:exec um die Module zu bestimmen.

Der folgende Ausschnitt zeigt den Modulnamen, die Verpackung und den Pfad zum Modul an

#!/bin/bash
set -e;
mvnOptions='--add-opens java.base/java.lang=ALL-UNNAMED';

string=$(MAVEN_OPTS="$mvnOptions" mvn help:active-profiles)
delimiter='Active Profiles for Project*';
modules=()
while read -r line; do
  if [[ $line == $delimiter ]]; then
      module=$(echo $line | sed -E "s/.*'(.*):(.*):(.*):(.*)'.*/\2/");
      packaging=$(echo $line | sed -E "s/.*'(.*):(.*):(.*):(.*)'.*/\3/");
      path=$(MAVEN_OPTS="$mvnOptions" mvn help:evaluate -Dexpression=project.basedir -pl "$module" -q -DforceStdout || true);
      if [[ $path == *" $module "* ]]; then
        path=$(pwd);
      fi
      modules+=("$module" "$packaging" "$path")
  fi;
done <<< "$string"

size="$(echo ${#modules[@]})";
moduleCount=$(( $size / 3 ));

# prints the found modules
if [ $moduleCount -gt 0 ]; then
  echo "$moduleCount module(s) found"
  for (( i=0; i<$moduleCount; ++i)); do
    line=$(($i + 1));
    moduleIndex=$(($i * 3));
    pathIndex=$(($i * 3+2));
    module=${modules[moduleIndex]};
    path=${modules[pathIndex]};
    echo "  $line. '$module' at '$path'";
  done;
fi;

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