Gewusst wie: filtern von Ressourcen in Maven, ersetzt Abhängigkeiten artifactId?
Ich versuche zu bauen, ein Glas, das eine xml-Datei als Ressource. Ich möchte einen filter anwenden, um das xml einfügen, den Namen von einer Abhängigkeit in die xml. Die Filterung funktioniert, denn ich war in der Lage, drop-in ${project.build.finalName}
und bekommen es ersetzt. Ich fand ein Tip, dass die Eigenschaft, die ich bin auf der Suche nach möglicherweise
${project.dependencies[0].artifactId}
aber das scheint nicht zu funktionieren. Ich bin auf der Suche zu ersetzen
<fileName>${project.dependencies[0].artifactId}</fileName>
mit
<fileName>OtherLibrary</fileName>
Ist das möglich?
xml-Datei in src/main/resources:
<somenode>
<fileName>${project.dependencies[0].artifactId}</fileName>
</somenode>
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo</groupId>
<artifactId>Thing</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Thing</name>
<url>http://maven.apache.org</url>
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<dependencies>
<dependency>
<groupId>com.pts</groupId>
<artifactId>OtherLibrary</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Dies ist maven 2.2.1, die durch die Art und Weise.
InformationsquelleAutor Jim | 2010-02-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verdammt, du hast Recht, dieses Eigentum nicht ersetzt bekomme bei der Filterung von Ressourcen. Das ist seltsam, und es klingt wie ein Fehler in der Maven-Resources-Plugin, weil diese Eigenschaft ist korrekt interpoliert, die während der
process-resources
phase, wie ich zeigen werde, in der workaround, die ich Vorschlage, unten (auf der Basis der maven-antrun-plugin und diereplace
Aufgabe).Ersten, fügen Sie den folgenden, um Ihre POM:
Dann, aktualisieren Sie Ihre XML-Datei in:
Mit diesen änderungen läuft
mvn process-resources
würde Folgendes Ergebnis:Was beweist, dass die Eigenschaft ist interpoliert (nicht aber bei maven Filterung von Ressourcen)1. Und wenn ein filter für mehr als eine Datei, die
replace
Aufgabe kann ein fileset. Passen Sie es an Ihre Bedürfnisse anpassen.1
Eigentlich wäre es schön, zum erstellen eines neuen Jira für diesen Fehler in dem Maven 2.x-Ressourcen-Plugin.ich habe MRESOURCES-118.Danke für die Erklärung.
Vielen Dank für das hinzufügen der bug-report, und für den workaround.
InformationsquelleAutor Pascal Thivent
Die indizierte Eigenschaften werden nur innerhalb der plugin-Konfiguration aufgrund der Art, wie Maven interpoliert die POM - so es verfügbar ist, um antrun ersetzen-Aufgabe, nicht aber die Filterung.
Jedoch Zugriff auf die Abhängigkeiten, die durch den index ist nicht sehr robust - es ist anfällig für änderungen in der übergeordneten. Könnten Sie stattdessen die folgenden in
pom.xml
:Können Sie dann weiter filtern mithilfe der Eigenschaft name:
<fileName>${project.dependencies[0].artifactId}</fileName>
in der gefilterten Ressourcen. Aber die zweite Lösung ist auf jeden Fall ein gutes.du hast Recht, sorry. Die interpolation Mechanismen sind etwas, das hat sich ziemlich viel ändern zwischen Maven 2.0.x, 2.2.x und 3.0. Ich glaube, dieser Ausdruck wird nur innerhalb der plugin-Konfiguration in den meisten Versionen von Maven, so ist es am besten nicht auf Sie verlassen, überhaupt.
Ich sollte darauf hinweisen, dass der Grund, warum ich bin auf der Suche nach dies ist, was ich vermute, ist eine einzigartige situation/edge-Fall, wo ich hinzufügen muss, nicht die EJB-jar in mein persistence.xml. Und weil das Ohr plugin nicht haben einen Weg, um die Namenskonvention festlegen für jar-Dateien in den lib-Ordner, ich bin gegangen auf diesem Weg. Der Krieg plugin eine schöne Möglichkeit, um Gläser Folgen Sie ein benennungsmuster, dass ich wünschte, die Ohr-plugin hatte. Siehe jira.codehaus.org/browse/MEAR-98 zum Beispiel. Schließlich werde ich code den nicht-ejb-jar Existenz. Es ist nur ein Glas habe ich geerbt und bin arbeiten zu integrieren.
InformationsquelleAutor Brett Porter