2017-10-05 5 views
0

Ich habe ein Java Maven Web App Projekt, das ich versuche aufzuräumen. Im <build> Abschnitt meines pom.xml, habe ich folgendes:Wie kann ich das Ressourcenverzeichnis in Maven zum Funktionieren bringen?

<build> 
    <resources> 
     <resource> 
      <filtering>true</filtering> 
      <directory>src/main/resources</directory> 
     </resource> 
    </resources> 
    <filters> 
     <filter>profiles/${build.profile.id}.profile.properties</filter> 
    </filters> 
    [...other properties...] 
</build> 

In meinem Projekt, das auf meinem Mac ist /Users/anthony/workspace/my-project/, ich src/main/resources/profiles/ Ich habe local.profile.properties und qa.profile.properties.

Dann in meinem Maven Profile in meinem pom, definiere ich ${build.profile.id} wie die folgenden:

<profile> 
    <id>local</id> 
    [...stuff...] 
    <properties> 
     <build.profile.id>local</build.profile.id> <!-- or qa --> 
     [...stuff...] 
    </properties> 
</properties> 

Als ich in meiner Konsole bin und laufen $ mvn clean install -Plocal, bekomme ich folgende Fehlermeldung:

Failed to execute goal ... on project my-project: Error loading property file '/Users/anthony/workspace/my-project/profiles/local.profile.properties'.

Es scheint, als ob Maven das Ressourcenverzeichnis für meine Filterprofil-Eigenschaftendatei nicht erkennt. Dies funktioniert nur, wenn ich explizit den gesamten Pfad meiner Eigenschaften setzt Datei, etwa so:

<filters> 
     <filter>src/main/resources/profiles/${build.profile.id}.profile.properties</filter> 
</filters> 

Gibt es eine Möglichkeit für mich nicht explizit müssen src/main/resources angeben? Ich dachte, dass der Sinn von mir, ein Ressourcenverzeichnis zu deklarieren, war, dass ich es benutzen könnte, besonders um die Filterung zu deklarieren.

Antwort

1

Das Ressourcenverzeichnis hat nur eine Bedeutung als "Ressourcen" für das Java-Artefakt, das erstellt wird, aber nicht für Maven selbst. Für Maven hat das Verzeichnis "resources" eine besondere Bedeutung in dem Sinne, dass Maven weiß, wohin diese Dateien in der resultierenden jar-Datei kopiert werden sollen. Aber wenn Maven mit Dateien arbeitet oder Dateien filtert, müssen Sie Maven den genauen Pfad mitteilen, da Maven nicht weiß, ob die gefilterte Datei eine Ressource, eine Quelldatei oder etwas anderes ist. Außerdem könnten Sie mehrere Quell- oder Ressourcen-Verzeichnisse definiert haben, und Maven würde nicht wissen, in welchen man filtern soll. Daher müssen Sie immer den vollständigen Pfad für Maven angeben.

Also, kurz gesagt:

Is there a way for me to not have to explicitly state src/main/resources?

Nr

Verwandte Themen