3 Stimmen

Wie aktualisiert man die Version eines abhängigen Geschwistermoduls mit dem Versions Maven Plugin

Ich habe ein Problem mit dem Aktualisieren der Abhängigkeitsversion von abhängigen Geschwisterprojekten.

Mein vereinfachtes Projekt sieht folgendermaßen aus.

root
|--parent
|--tool-core
|--tool
|--functional-tests

Das übergeordnete Projekt enthält alle globalen Eigenschaften und das Abhängigkeitsmanagement. Die funktionalen Tests hängen vom Tool ab, und das Tool hängt vom Tool-Core ab. Die Wurzel pom.xml nur aggregiert (gibt an, ob die funktionalen Tests einbezogen werden) und das übergeordnete Projekt ist das übergeordnete Projekt für alle Projekte. Ich weiß nicht, ob dies trivial ist, aber das übergeordnete Projekt wird nicht in die Aggregation einbezogen, da es bereits das übergeordnete Projekt für jedes untergeordnete Projekt ist.

Mein Problem ist, wenn ich die Version des Tools mit versions:set . Die Version des Werkzeugs wird geändert, aber die Abhängigkeiten zum Werkzeug werden nicht geändert. Wie sollte ich dies tun? Ich habe bereits versucht, mehr oder weniger zufällig andere Ziele und ich habe versucht, das Handbuch zu lesen.

Ich habe bereits versucht, die <dependencyManagement> Abschnitt und eine Eigenschaft für die Version im übergeordneten Abschnitt, aber diese werden nicht auf die neue Version aktualisiert.

Für jede Hilfe sind wir sehr dankbar.

Zusatz

Im besten Fall erhalte ich die Meldung "Ignoring reactor dependency: com.tool:tool:jar:null:1.2.3". Dies ist, wenn ich versuche versions:use-latest-releases . Allerdings, versions:display-dependency-updates zeigt, dass es eine Aktualisierung einer "lokalen Abhängigkeit" gibt (Funktionstests hängen vom Tool ab).

Update

Es scheint, dass Maven nach neuen Versionen in den Repositories sucht, einschließlich des lokalen Repositories, was ziemlich offensichtlich erscheint, wenn ich daran denke. Dies bedeutet jedoch, dass das Tool gebaut und im lokalen Repository installiert werden muss, bevor die Abhängigkeiten aktualisiert werden.

Ich frage mich nur, ob dies der richtige Weg ist, um Integrationstests als eigenes Projekt zu haben. Ich hatte gehofft, dass es eine Möglichkeit geben würde, die Version sofort zu aktualisieren.

Update

Grundsätzlich habe ich die folgende Konfiguration. Die Versionsabhängigkeit von functional-tests der tool wird definiert durch den parent Projekt. Ich habe die tool-core da sie als Teil des Programms tool .

Wurzel:

<groupId>com.somecompany</groupId>
<artifactId>x-reactor</artifactId>
<packaging>pom</packaging>
<version>1.0</version>

<profiles>
    <profile>
        <id>cli</id>
        <modules>
            <module>tool</module>
        </modules>
    </profile>
    <profile>
        <id>deploy</id>
        <modules>
            <module>tool</module>
            <module>functional-tests</module>
        </modules>
    </profile>
</profiles>

Elternteil:

<groupId>com.somecompany</groupId>
<artifactId>x-parent</artifactId>
<packaging>pom</packaging>
<version>1.0</version>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.somecompany</groupId>
            <artifactId>tool</artifactId>
            <version>3.2.3</version>
        </dependency>
    </dependencies>
</dependencyManagement>

Werkzeug:

<parent>
    <groupId>com.somecompany</groupId>
    <artifactId>x-parent</artifactId>
    <version>1.0</version>
    <relativePath>../parent/pom.xml</relativePath>
</parent>

<groupId>com.somecompany</groupId>
<artifactId>tool</artifactId>
<packaging>jar</packaging>
<version>3.2.3</version>

Funktions-Tests:

<parent>
    <groupId>com.somecompany</groupId>
    <artifactId>x-parent</artifactId>
    <version>1.0</version>
    <relativePath>../parent/pom.xml</relativePath>
</parent>

<groupId>functional-tests</groupId>
<artifactId>functional-tests</artifactId>
<version>0.1</version>
<packaging>pom</packaging>

<dependencies>
    <dependency>
        <groupId>com.somecompany</groupId>
        <artifactId>tool</artifactId>
    </dependency>
</dependencies>

7voto

Hannes Kogler Punkte 469

Ich bin auf das gleiche Problem mit dem "use-releases"-Ziel gestoßen und war sehr froh, dass das versions-Plugin (gerade jetzt?) diesen Fall mit dem Parameter " excludeReactor=false "! :-)

2voto

mkko Punkte 3972

Offenbar muss man das Tor laufen lassen versions:use-latest-versions in demselben Pfad wie die zu aktualisierende pom.xml befindet. Ich habe das Problem gelöst, indem ich die Versionen in das übergeordnete Projekt verschoben und nur dieses aktualisiert habe. Ich bin nicht sehr zufrieden mit dieser Lösung, da es scheint, dass das Versions-Plugin kein Downgrade der Version unterstützt. Außerdem wird die neue Version aus dem (lokalen) Repository bezogen, was bedeutet, dass das Tool vor der Aktualisierung der Version gebaut werden muss. Ich glaube, das war ursprünglich mein Problem.

Hier ist das Skript zur Lösung dieses Problems:

#!/bin/bash

if [[ $# -lt 1 ]]; then
    echo "Usage: $0 [version number]"
    exit 1
fi

function revert_version() {
    mvn -Pall versions:revert > /dev/null
    echo "ERROR: Failed updating the version"
    cat mvn_out.txt
    exit 1
}

v=$1
profile=cli
echo "Updating the version to $v..."
mvn -P$profile versions:set -DnewVersion=$v -DartifactId=tool -q
[ $? -eq 0 ] || revert_version

echo "Building the tool..."
mvn -P$profile install > /dev/null
[ $? -eq 0 ] || revert_version

echo "Updating the dependencies..."
mvn versions:use-latest-versions -Dincludes=com.somecompany:* -f parent/pom.xml -q
[ $? -eq 0 ] || revert_version
mvn -Pall versions:commit -q
[ $? -eq 0 ] || revert_version

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