Ho un file XML (urlrewrite.xml) che ha bisogno di un segnaposto di proprietà risolto. Abilito il filtraggio Maven per raggiungere questo obiettivo. Funziona bene per il file WAR assemblato.Come filtrare le risorse quando si utilizza il plugin maven jetty?
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
Il problema è quando si tenta di eseguire l'applicazione in modalità di sviluppo utilizzando il Maven-molo-plugin (Maven Jetty Plugin), come Maven pontile: run.
Il file in questione, urlrewrite.xml, si trova nella directory src/main/resources e quindi dovrebbe (e lo fa) finisce in/WEB-INF/classes (o target/classes per maven jetty: run).
L'URLRewriteFilter configurazione specifica la posizione del file di configurazione come segue:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>confPath</param-name>
<param-value>/WEB-INF/classes/urlrewrite.xml</param-value>
</init-param>
</filter>
Ciò funzionerà in fase di distribuzione. Tuttavia, usando il plugin maven jetty, URLRewrite morirà con una NullPointerException perché usa context.getResourceAsString ("/ WEB-INF/classes/urlrewrite.xml") per caricare il file di configurazione. Jetty restituisce null per questo perché quando esegue l'applicazione dallo spazio di lavoro risolve/WEB-INF/classes/... in src/main/webapp/WEB-INF/.... Il file non esiste lì perché WAR non è stato ancora assemblato. Dovrebbe invece estrarre la risorsa da target/classes/urlrewrite.xml.
Se questo è oscuro per te, allora probabilmente non sarai in grado di rispondere a questa domanda perché sospetto che dovrai essere un guru del Jetty per capire una soluzione alternativa (suggerimento: è una sfida!).
Qualcuno sa un modo per aggirare questo? Ho anche provato le soluzioni alternative seguenti per conoscere alcun risultato:
- Put urlrewrite.xml sotto una nuova directory, src/main/webResources e aggiungerlo al plugin guerra Maven <webReources> e attivare il filtro. Copierà il contenuto nella posizione appropriata quando WAR è in pacchetto, ma non lo renderà disponibile per il jetty: esegui
- Alcuni altri hack che non ricordo nemmeno ... (aggiornerò se lo faccio)
in sintesi, Maven-molo-plugin ha bisogno del file di essere sotto src/main/risorse/webapp/via di inserimento e il nome in modo da essere disponibile per il pontile Maven: comando di marcia ...
Grazie per il tuo aiuto ...
Cordiali saluti, Lloyd F orce
+1 Per la soluzione di documentazione (ci sono MOLTE domande senza risposta in rete). Se questo funziona per te, accettalo da solo. Solo una parte, hai provato ad aggiungere il profilo esperto di "Sviluppo" con il filtro specializzato delle risorse? Questo è stato un approccio che ho preso per il mio progetto web non-jetty. –
Utilizzare facoltativamente il plug-in maven-replacer e fare in modo che scriva il file sostituito in/WEB-INF/classes/dir. Si assicurerà che la struttura dir esista. – Steven
Per quelli che utilizzano Jetty 9: org.eclipse.jetty.util.resource.ResourceCollection anziché org.mortbay.resource.ResourceCollection – RockMeetHardplace