Wie kann maven verwendet werden, eine kontinuierliche integration situation zu installieren versionierten Artefakten im repository?
Wir sind in den Prozess der Umwandlung unserer Haupt-build-Prozess von ant auf maven. Wir verwenden TeamCity für unser Continuous Integration server (CI).
Wir gerne den CI-server kick-off (nächtliche) builds, deren version enthält eine build-Nummer, wie in 1.0.0.build#. Diese builds installiert werden würde, in unserem lokalen maven-repository für die Verwendung durch andere Projekte. Also der CI-server verwaltet die Versionen, maven baut das Projekt, und die maven-repository machen würde, das baut zugänglich zu anderen Projekten.
Ich soll zu initiieren, den Bau von den CI-server mit dem folgenden Befehl:
mvn -Dversion=1.0.0.25 install
Projekt-pom hätte eine falsche Versionsnummer, und das -D flag außer Kraft setzen, wie in:
<version>0.0.0.0</version>
Das problem mit dieser Methode ist, dass die maven install plugin verwendet nur die version in der pom-Datei, nicht die version, die übergeben auf der Kommandozeile. Dies ist bereits in das maven-Problem.
So, da dieses Problem existiert seit 08/2006 und hat nicht behoben wurden, gehe ich davon aus, dass dies irgendwie nicht 'die maven Weg'. Meine Frage ist also, wie kann man maven verwendet werden, eine kontinuierliche integration situation zu installieren versionierten Artefakten im repository?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klingt wie Sie bauen wollen, SNAPSHOT-Versionen mit einzigartigen Versionen.
So, in Ihrem POM deklarieren version:
Dann, in der distributionManagement Abschnitt Ihres POM ermöglichen einzigartige Versionen für die snapshotRepository über (siehe Maven ist POM reference auf diese):
FYI, beachten Sie, dass Maven-Konventionen empfehlen-Versionen erklärt werden als große.Moll.revision. So, 1.0.25 statt 1.0.0.25. Wenn Sie in der Lage sind, diese zu verwenden, Versionierung Schema, werden die Dinge mehr reibungslos funktionieren, in einem Maven-Welt.
Matthew ' s Antwort bietet eine Lösung, wo die Artefakte hochgeladen werden, in den lokalen und remote-repository mit der gewünschten Versionsnummer, D. H. die Wege innerhalb dieses repository enthält die richtige version zahlen, aber Maven installiert und nutzt immer die Quelle POM-Datei, enthält dennoch die
${ciVersion}
im version-element an.Wenn Sie ein multi-Modul mit einem gemeinsamen übergeordneten Element wie diesem:
werden Sie nicht in der Lage, zum Verweis auf eine bestimmte version von der
myChild
- Modul, als die Auflösung von Abhängigkeiten existieren wird, mit einer Fehlermeldung, dass es nicht finden können, diemyParent
Modul mit version${ciVersion}
.Jedoch, Sie könnten die beheben-pom-maven-plugin, dass der Upload ein POM in das lokale und das remote-repository, in dem alle Variablen innerhalb der POM erhalten, ersetzt durch Ihre aktuellen Werte. Um dies zu tun, müssen Sie fügen den folgenden Code in Ihrem (übergeordneten) POM:
Shek 's Antwort ist vermutlich" der "maven way", also ich werde es akzeptieren, wie die richtige Antwort. Wir sind jedoch nicht bereit, sich zu ändern unsere Konventionen, also hier die Lösung, die wir verwenden.
Durch die Verwendung eines Grad der indirektheit, die Sie übergeben können, die eine Versionsnummer in der pom zur build-Zeit und die installieren und bereitstellen von plugins, die Sie verwenden. Zum Beispiel:
Können wir nicht überschreiben ${project.version} direkt. Stattdessen fügen wir eine zweite Eigenschaft namens 'ciVersion' und geben Sie einen default-Wert '0.0.0.0' haben Sie in den Eigenschaften-Abschnitt. Jetzt ist der CI-server kann die Versionsnummer durch überschreiben der ciVersion-Eigenschaft auf der Befehlszeile. In:
Installieren und bereitstellen von plugins wird mit dem Wert des ciVersion Eigenschaft, die übergeben wurde, wenn ${project.version} verwiesen wird, wie erwartet, und der Standardwert wird verwendet, wenn keine version auf der Kommandozeile. Dies ermöglicht es uns zu wechseln, um maven mit minimalen Auswirkungen auf unseren Prozess. Darüber hinaus ist dieser workaround ist unaufdringlich, so dass für eine einfache Umschaltung, um die SNAPSHOT-Funktion, wenn gewünscht.