2016-06-01 8 views
2

Ich verwende Snapshot Abhängigkeit nur für Tests in meinem ProjektVeröffentlichung Projekt mit SNAPSHOT Test Abhängigkeit

<dependency> 
     <groupId>com.my-company</groupId> 
     <artifactId>my-test-library</artifactId> 
     <version>LATEST</version> 
     <scope>test</scope> 
    </dependency> 

Ich bin mir bewusst über die Risiken von LATEST verwenden, aber das ist genau das, was ich in den Tests erreichen will. Allerdings dieser Test Abhängigkeit Blöcke Freisetzung von Produktionscode, wenn ich rufe mvn release:prepare mit Ausnahme:

[INFO] Checking dependencies and plugins for snapshots ... 
There are still some remaining snapshot dependencies. 
... 
Caused by: org.apache.maven.shared.release.ReleaseFailureException: Can't release project due to non released dependencies : 
    com.my-company:my-test-library:jar:LATEST:test 
in project 'My Project' 

Mein dependencyManagement:

<distributionManagement> 
    <repository> 
     <uniqueVersion>true</uniqueVersion> 
     <id>rep-releases</id> 
     <name>Release Repo</name> 
     <url>${url}</url> 
    </repository> 
    <snapshotRepository> 
     <uniqueVersion>true</uniqueVersion> 
     <id>rep-snapshots</id> 
     <name>Snapshots Repo</name> 
     <url>${url}</url> 
    </snapshotRepository> 
</distributionManagement> 

Warum Testcode etwas mit Freigabeverfahren zu tun hat? Wie kann ich mit der Freigabe fortfahren und die Abhängigkeit so lassen wie sie ist?

+1

könnten Sie die 'distributionManagement' Details aus der pom.xml teilen auch – nullpointer

+2

Verwenden Sie niemals solche Dinge wie' LATEST' in einer Version zu ermöglichen. ..Wenn Sie sich auf Testcode verlassen, der nicht veröffentlicht wurde, können Sie Ihren Build nicht reproduzieren. Und das ist der Grund, warum Release-Plugin klagt ... – khmarbaise

+0

@khmarbaise Wie ich schrieb, bin ich mir bewusst, alle Folgen der Verwendung von Latest und nicht reproduzierbaren Build. Ich frage nur, warum das Release-Plugin sich über TEST-Code beschwert, während es versucht, PRODUCTION-Code zu veröffentlichen. –

Antwort

2

Was Sie tun, ist wirklich gegen alle Regeln und Sie sollten zuerst eine Freigabe für Ihre Testabhängigkeit machen, dann die Version des Projekts freigeben und dann in einen Snapshot umwandeln und die Testbereichsabhängigkeit zu einem Snapshot wiederherstellen .

Wenn Sie wirklich, wirklich, wirklich dumme Dinge tun müssen, dann können Sie die -DignoreSnapshots=true Option angeben. Dies ignoriert jedoch alle SNAPSHOT Abhängigkeiten, die in Ihrer pom.xml definiert sind, was noch schlimmer ist.

Sie wurden gewarnt. Gehen Sie auf eigene Gefahr und möge Gott gnädig sein!

+1

Danke, ein Teil meiner Frage wird beantwortet. Aber zweitens bleibt noch offen - warum release plugin test-scoped Abhängigkeiten? Sollte es nicht nur Produktionscode-Abhängigkeiten prüfen? –

+0

Da es beim Erstellen eines Releases am wichtigsten ist, dass Sie zu einem beliebigen Zeitpunkt in der Zukunft einen vollständig reproduzierbaren Status Ihres Codes haben. Wenn Sie einen "SNAPSHOT" irgendeiner Art haben und Sie den Code zum Beispiel nach fünf Monaten neu erstellen, dann könnte sich diese Testabhängigkeit geändert haben und Ihr getaggter Code könnte nicht mehr funktionieren und das wäre definitiv nicht reproduzierbar. – carlspring

1

Wenn Sie alle Konsequenzen der Verwendung von LATEST bewusst sind. Sie können mit dem Befehl:

mvn release:prepare -DignoreSnapshots=true 

Eigenschaft ignoreSnapshots=true SCHNAPPSCHUSS Abhängigkeiten