Maven filtert nach dem Zufallsprinzip keine Ressourcen

8

Das ist irgendwie ärgerlich, und ich habe es nie zuvor in mehreren Jahren der Zusammenarbeit mit Maven gesehen. Ein einzelnes, einfaches Projekt (das ich selbst nicht geschrieben habe) wird nach dem Zufallsprinzip die Ressourcen nicht filtern, und ich kann nicht herausfinden, was es verursachen könnte. Ich kann den Projektquellcode nicht teilen, aber ich werde versuchen, so viel wie möglich vom POM zu teilen. Bedenken Sie, dass das Problem nicht im Code liegt, sondern dass Maven nach dem Zufallsprinzip entscheidet, keine Ressourcen zu filtern.

Ich hatte dies ursprünglich in meinem POM-Build-Tag konfiguriert:

%Vor%

Und in meinem src / main / resources Verzeichnis habe ich eine Datei namens spring-config.xml. Diese Datei enthält mehrere Eigenschaften, die durch Maven-Profileigenschaften ersetzt werden sollten. Ich habe meine Build-Profile wie folgt konfiguriert:

%Vor%

Um zu bauen, führe ich diesen Befehl aus:

%Vor%

Nun verwendet dieses Projekt Spring und verwendet dieselbe Spring-Konfiguration zum Testen und Ausführen, sodass der Kontext eine Datenbankverbindung herstellt, wenn Testfälle ausgeführt werden. Die meiste Zeit wird der Build abgeschlossen und die Testfälle werden bestanden. Etwa einmal in 10 werden die Testfälle jedoch fehlschlagen, weil die Eigenschaften nicht ersetzt wurden und Spring versucht, eine Verbindung zu "$ {db.url}" statt "jdbc: oracle: thin: @ xxx.xxx.com: 1521" herzustellen : xxx ".

Seltsamerweise, etwa 9 Mal in 10, wird das gepackte JAR das gleiche Problem haben, obwohl gerade die Testfälle bestanden hat . Ich habe das target / classes-Verzeichnis überprüft, und die Dateien dort haben genau das gleiche Problem. Ich stellte mir vor, dass zu einem bestimmten Zeitpunkt im Lebenszyklus des Builds etwas Ungewöhnliches mit dem Maven-Ressourcen-Plug-in vor sich ging und vielleicht die Dateien fälschlicherweise überschrieb.

Meine Bandaid-Lösung

Im Maven-Lebenszyklus ist der Auftrag ein Kompilierungs- & gt; test- & gt; -Paket. Um die Ressourcen auf die beiden Phasen zu filtern, die mir Kopfschmerzen bereiteten, habe ich das Ressourcen-Plugin so konfiguriert, dass es sowohl in der Kompilierungs- als auch in der Testphase ausgeführt wird:

%Vor%

Das scheint durchgängig zu funktionieren, aber ich habe immer noch keine irdische Idee, warum ich das für ein einzelnes Projekt von den Dutzenden, an denen ich in den letzten Jahren gearbeitet habe, tun musste. Ich habe noch nie gesehen, dass Maven vorher etwas getan hat, was mich beunruhigt hat, dass es wieder kaputt gehen wird. Irgendwelche Gedanken würden geschätzt werden.

    
monitorjbl 04.12.2013, 16:31
quelle

1 Antwort

4

Wie Taylor in einem Kommentar oben schrieb:

  

Laufen Sie Eclipse oder ähnliches gleichzeitig? Es könnte sein, dass die maven-gefilterte Ressource überschrieben wird, um "hilfreich" zu sein.

Problem ist eine Sonnenfinsternis. Abhängig von Ihrer Eclipse-Konfiguration (m2e ja / nein) überschreibt Eclipse einfach Ihre Ressourcendateien, sobald Sie sich dazu entschließen, Ihr Projekt zu aktualisieren.

Dies kann mithilfe der Eclipse Maven-Integration (im Gegensatz zu eclipse: eclipse) gelöst werden, die das Filtern von Ressourcen "on-the-fly" korrigiert

Oder natürlich, indem Sie die Sonnenfinsternis während des Aufbaus stoppen, was als Arbeitsablaufmodell nicht wirklich möglich ist.

    
blackbuild 11.12.2013, 16:01
quelle