Ich verwende Maven 2.2 mit Nexus 1.4.0Maven deploy geändert Artefakte nur
Lassen Sie uns sagen, dass ich eine Pom-Struktur wie diese haben (mit entsprechenden Versionen)
parentproj, v1.0.1
- childproj1, v1.0.2
- childproj2, v1.0.7
childproj1 und childproj2 verschieden sind Teile der Anwendung (zB GUI und Backend) und ich möchte ihre Versionen getrennt halten können, damit ich eine neue Version des Backends veröffentlichen kann, ohne eine neue Version der GUI veröffentlichen zu müssen.
, nun diese Struktur zu implementieren es
mvn parentproj und sagen bequem zu gehen wäre zu Nexus einsetzen -DperformRelease = true
, die alle Artefakte auf dem Nexus realease Repository bereitstellen würde . Dies funktioniert gut, das erste Mal, dass ich es einsetzen, aber das zweite Mal, dass ich auf Probleme stoßen: Lassen Sie uns sagen, dass ich ein Update auf childproj1 gemacht, so dass wir jetzt die folgenden Versionen:
parentproj, v1.0.1
- childproj1, v1.0.3
- childproj2, v1.0.7
In dieser Situation Nexus wird nicht lass mich mvn deploy von parentproj machen, da es bereits eine Kopie von childproj2 in der Version 1.0.7 hat. Nexus wird sagen "Ressource, illegale Anfrage: Repository mit ID = 'Releases' erlaubt keine Aktualisierung von Artefakten." Das ist in Ordnung, ich möchte die bestehenden Versionen nicht versehentlich aktualisieren.
Aber ich denke, was ich tun möchte, ist in der Lage zu sagen Maven etwas wie "nur die Artefakte bereitstellen, die Versionen haben, die nicht bereits im Release-Repository vorhanden sind".
Gibt es eine Möglichkeit, dies zu tun, oder müsste ich jedes Projekt selbst bereitstellen?
Vielen Dank für Ihre Antwort John, wir untersuchen diesen Ansatz auch und es könnte sehr gut sein, die am Ende zu nehmen. Ich stimme zu, dass die Versionskonsistenz viel Wert bietet, aber ich befürchte auch, dass der Buildprozess für ein großes Projekt zu aufgebläht und zeitraubend wird, wenn Sie die gesamte Plattform für Änderungen aktualisieren müssen. – David
+1 für Vorschlag der (richtige und korrekte) Verwendung des SNAPSHOT-Qualifikationsmerkmals auf der Version, um dieses Problem zu lösen. – whaley
Ich bin nicht einverstanden mit der letzten Aussage darüber, zusammen kompiliert und getestet zu werden. Wenn Sie Versionsabhängigkeiten für JARs festgelegt haben, kompiliert Maven Ihr Projekt mit diesen JARs, so dass Sie immer noch alles kompiliert zusammen mit SNAPSHOT oder festen Versionsabhängigkeiten erhalten. Wie bei Tests, bei echten Unit-Tests, sollten Klassenabhängigkeiten, insbesondere über JAR-Grenzen, gespottet werden. Dies würde bedeuten, dass Ihr Code niemals zusammen getestet wird, es sei denn, Sie haben eine Art Funktions-/Integrationstest mit der bereitgestellten App ausgeführt, dann wäre SNAPSHOT oder eine feste Version nicht mehr von Bedeutung. –