Maven 3.0 "mvn release: perform" mag keine pom.xml, die nicht im Stammverzeichnis von git repos ist

8

Ich habe eine Frage zu Maven, dem maven-release-plugin, git integration, pom.xmls und pom.xmls in Unterverzeichnissen der lokalen Kopie des Repos anstatt im root.

Hier ist das Setup:

  • Ich habe einen GitHub-Account mit einer begrenzten Anzahl privater Repositories
  • Ich möchte Maven benutzen, um meine Builds / Releases zu organisieren
  • Ich muss vielleicht viele Maven- "Projekte" erstellen, mehrere Projekte pro Git-Repository
  • Jedes maven-Projekt benötigt eine "pom.xml", um seine Eigenschaften zu definieren
  • Ich kann es nicht oder zumindest nicht bequem machen, alle pom.xml-Dateien im Stammverzeichnis des Git-Repositorys
  • zu speichern
  • Am Ende habe ich dieses Ordnerlayout für Projekte:
    • git_repo_root_dir
      • Projekt_A -Ordner
        • pom.xml
        • anderer_Code
      • Projekt_B -Ordner
        • pom.xml
        • anderer_Code
      • usw.
      • ...
  • Ich kann erfolgreich zum Verzeichnis git_repo_root_dir / project_A gehen und ein "mvn release: prepare"
  • machen
  • Ich scheitere mit diesem Schritt in git_repo_root_dir / project_A: "mvn release: perform"
    • Das Problem scheint zu sein, dass der git-getaggte Code in git_repo_root_dir / project_A / target / checkout / project_A in Vorbereitung auf den Release Build erfolgreich ausgecheckt wurde, aber nach dem Checkout geht das "maven-release" Plugin in das Verzeichnis git_repo_root_dir / project_A / target / checkout /. anstelle von git_repo_root_dir / project_A / target / checkout / project_A /. um das eigentliche Build zu machen, und es gibt keine Möglichkeit, dem "maven-release" -Plugin zu sagen, dass es in ein Unterverzeichnis der speziellen getaggten Kopie der Quelle treten soll, bevor er versucht, sich mit der pom.xml
    • herumzuärgern
  • FRAGE: Gibt es einen Weg dahin? Gibt es eine Möglichkeit, "mvn release: perform" irgendwie zu sagen, um zum Unterverzeichnis zu gelangen?

Hier ist der tatsächliche Fehler, den ich während dieses Prozesses erhalte:

%Vor%

Danke.

    
clarafaction 21.05.2012, 23:58
quelle

3 Antworten

10

Dies sollte den Trick machen:

%Vor%     
Exceptiondev 11.10.2012 14:42
quelle
6

Sie können es auf die gleiche Weise tun, wie Sie normalerweise sag Maven, dass er von einem POM, der woanders ist, laufen soll : die Option -f . mvn --help beschreibt es so:

%Vor%

Um dies in einer Version zu tun, müssen Sie nur die entsprechende Option an das Release-Plugin übergeben. Sie können dafür die Zieleigenschaft "arguments" verwenden. Diese Eigenschaft teilt dem Release-Plugin nur einige zusätzliche Argumente mit, die an den mvn -Befehl angehängt werden, der bei der Veröffentlichung ausgeführt wird. Sie können es über die Befehlszeile festlegen, indem Sie -D arguments="-f path/to/pom" anhängen oder in der Konfiguration des Release-Plugins dauerhaft auf den Pom setzen, etwa wie

%Vor%     
Ryan Stewart 22.05.2012 03:24
quelle
-2

Das erste ist, git zu verstehen, dessen Konvention es ist, dass jedes Projekt sein eigenes Repository hat. Die nächste Sache ist, dass Maven seine Konventionen hat und die pom.xml in die Wurzel seines Projekts zu stecken ist die offensichtlichste. Außerdem versuchst du gegen Maven zu kämpfen und ich werde vorhersagen, dass du den Kampf verlieren wirst und dein Leben nicht einfach wird. Wenn Ihre Projekte A und B in irgendeiner Art verwandt sind (gleiche Versionsnummer oder gleiche Release-Zeiten), sollten Sie über einen Multi-Modul-Build nachdenken, der zu einer Struktur wie dieser führt:

%Vor%

und Sie können eine Freigabe von sowohl projectA (besser nennen es ein Modul) und Modul b in einem einzigen Schritt von der Wurzel aus tun.

    
khmarbaise 22.05.2012 06:29
quelle