2015-02-13 2 views
33

Ausgehend von einiger Montage Plugin-Version Maven baut Ausgabe die folgende Warnung:Maven Montag Plugin Warnung "Der Assembly Descriptor enthält eine Dateisystem-root relative Referenz"

[WARNUNG] Die Assembly Descriptor einen Dateisystem-root relativ enthält Referenz, die nicht plattformübergreifend kompatibel ist/

Gibt es eine empfohlene gebrauchsfertige Lösung dafür? Direktes Googeln hat mir viel Müll und keine echte Hilfe gebracht. Re-Check von Maven Assembly Plugin Hilfe hat keine Antwort für mich, vielleicht jemand anderes hat bessere Suchfähigkeit und kann helfen.

UPDATE

Ja, das ist wahrscheinlich wegen der Linux-like outputDirectory aber wie soll ich das tragbar sein umschreiben? Guckte auf Assembly-Plugin-Dokumentation und keine Portabilität Leitfaden gefunden.

<fileSets> 
    <fileSet> 
     <directory>${basedir}/src/main/resources</directory> 
     <outputDirectory>/</outputDirectory> 
    </fileSet> 
</fileSets> 
+0

zeigen Ihnen den Assembly Descriptor? Es wird wahrscheinlich zeigen, dass Sie irgendwie auf einen absoluten Pfad (_/a/b/c_) verweisen, was zu vermeiden ist, um Build-Portabilität in Umgebungen zu gewährleisten. – Tome

+0

Ja, das ist der Fall, wenn Sie eine TAR-Datei erstellen, die nicht enthalten kann ein Dateisystem-Root-Eintrag ... welcher übrigens. macht keinen Sinn. – khmarbaise

+1

Wie Sie sehen können, definiert das outputDirectory ein '/', was zur Folge hat, dass alle Inhalte immer an die gleiche Position extrahiert werden. Ansonsten ist dieser Ort auf den root-Account beschränkt. Außerdem fragen Sie sich, warum Sie 'fileSets' verwenden, um den Ordner' src/main/resources' zu erhalten. Besonderer Grund dafür? – khmarbaise

Antwort

46

Die Arbeitslösung ist die leere outputDirectory angeben:

<fileSets> 
    <fileSet> 
     <directory>${basedir}/src/main/resources</directory> 
     <outputDirectory></outputDirectory> 
    </fileSet> 
</fileSets> 
+2

Es ist nicht immer wünschenswert, es einfach leer zu lassen, was sollte getan werden, wenn es eingestellt werden muss? – scrapcodes

+3

Wenn Sie hier ein Verzeichnis angeben wollen, dann tun Sie das - deshalb ist dieser Parameter hier sowieso. Vermeiden Sie absolute Pfade, die mit "/" beginnen. – Torsten

+2

Oder selbstschließende '' – naXa

21

mit einem leeren outputDirectory Element funktioniert, aber ich wäre nicht überrascht, wenn jemand davon ausgegangen, könnte sie sicher gelöscht werden.

So werden deutlicher, könnten Sie auch die Warnung durch Schreiben vermeiden:

<outputDirectory>${file.separator}</outputDirectory> 
+0

IMO ist dies der beste Ansatz, da es für jeden Pfad nicht nur/aber auch/foo/bar funktioniert –

+0

Könnten Sie bitte erläutern, wie ich die file.separator-Eigenschaft für arbeiten würde beide * nix Plattformen und Windows-Plattform? – vivekmore

3

Beachten Sie, dass diese neben / nur an anderen Orten passieren kann. Die obigen Antworten sind korrekt, decken diesen Fall jedoch nicht ab.

Suchen Sie nach so etwas wie dies in Ihrem assembly.xml:

<fileSets> 
    <fileSet> 
     <directory>${basedir}/src/main/resources</directory> 
     <outputDirectory>/lib</outputDirectory>   <!-- <<< look for this --> 
    </fileSet> 
</fileSets> 

und dies ändern:

<fileSets> 
    <fileSet> 
     <directory>${basedir}/src/main/resources</directory> 
     <outputDirectory>lib</outputDirectory> 
    </fileSet> 
</fileSets> 
Verwandte Themen