2009-07-26 3 views
9

Ich verwende Ressourcenfilterung auf Jsps, basierend auf Profilen. Ich entwickle auch lokal mit mvn jetty:run, aber die Filterungsphase läuft nicht.Ausführen von Ressourcenfiltern bei der Verwendung von Jetty: run

Wie kann ich mit dem Jetty-Plugin filtern?


Konfiguration Schnipsel:

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-war-plugin</artifactId> 
<version>2.0.2</version> 
<configuration> 
    <webResources> 
     <resource> 
      <directory>src/main/webapp</directory> 
      <includes> 
       <include>error.jsp</include> 
      </includes> 
      <filtering>true</filtering> 
      <targetPath>/</targetPath> 
     </resource> 
    </webResources> 
</configuration> 
</plugin> 

<profile> 
    <id>jci</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
     <property> 
      <name>jci</name> 
     </property> 
    </activation> 
    <properties> 
     <error.title>Some value here</error.title> 
    </properties> 
</profile> 
+0

@ Robert: Haben Sie eine Lösung für dieses Problem in der Zwischenzeit gefunden? Ich war geneigt, eine ähnliche Frage zu stellen, als ich auf deine stieß ... – Tim

+0

Running 'jetty: deploy-war' hat mich etwas weiter gebracht, aber immer noch keine echte funktionierende Lösung .. Wer hat eine echte Antwort auf diese Frage? – Tim

Antwort

6

Sie möchten die Anlegestelle verwenden: Lauf explodierte Ziel statt Anlegesteg: laufen. Von the documentation:

:

Mit diesem Ziel wird zunächst Ihre Webapp in eine explodierte Kriegsdatei zusammengefügt und dann zu Jetty deployed.

Dies kann sicherstellen, dass die entsprechenden War Lifecycle-Phasen ausgeführt werden, bevor der Server gestartet wird.

Sind Sie sicher, dass das jci-Profil aktiviert ist? Wenn für das Build ein anderes Profil angegeben wird, aktiviert die < activeByDefault-Eigenschaft > das Profil nicht, siehe this bug für Details.

Von John Casey Antwort:

Das obige Beispiel wird wie vorgesehen arbeiten. Das Element < activeByDefault/> soll angeben, dass dieses Profil aktiviert wird, wenn keine anderen Profile im Build aktiv sind. Daher führt die spezifische Aktivierung eines Profils dazu, dass dieses Profil deaktiviert wird.

+1

THanks für die Antwort. Ich werde in Run-exploded schauen. Und ja, ich bin mir sicher, dass das Profil aktiv ist, das ist nicht das Problem. –

+1

'mvn jetty: run-exploded -Dmaven.test.skip = true' ist ein Gewinner. Vielen Dank! –

+2

Sorry, sprach zu bald.Weder JSP-Änderungen noch Java-Nachladevorgänge scheinen zu greifen. –

1

Die gefilterten Dateien landen normalerweise im Build-Zielverzeichnis. Wenn Sie "mvn jetty: run" ausführen, wird standardmäßig das ungefilterte Verzeichnis src/main/webapp verwendet. Sie müssen lediglich das Build-Ziel als zusätzliches Ressourcenverzeichnis hinzufügen. Fertig, Anlegesteg erstellt ein Overlay und verwendet auch die gefilterten Dateien.

   <plugin> 
        <groupId>org.mortbay.jetty</groupId> 
        <artifactId>maven-jetty-plugin</artifactId> 
        <version>6.1.26</version> 
        <configuration> 
         <webAppConfig> 
          <contextPath>/${project.build.finalName}</contextPath> 
          <baseResource implementation="org.mortbay.resource.ResourceCollection"> 
           <resourcesAsCSV>src/main/webapp,${project.build.directory}/${project.build.finalName}</resourcesAsCSV> 
          </baseResource> 
         </webAppConfig> 
         <scanIntervalSeconds>2</scanIntervalSeconds> 
        </configuration> 
       </plugin> 
0

Dank @Randy habe ich es geschafft, auch das funktioniert. Hier ist ein aktuelles Beispiel, das sowohl die Ressourcen-Filterung als auch die Anlegestellenbasierung auf Basis von org.eclipse.jetty statt der älteren Mortbay zeigt. Hier filtern wir zwei JSP-Seiten login.jsp und index.jsp und setzen eine Variable "$ {login.resources}" in der JSP auf "login.res.jsp" wie im Abschnitt Eigenschaften unten. Hinweis wir filtern und schreiben diese auf "jetty.docroot", dann überlagern wir jetty.docroot über src/main/webapps, so dass unsere gefilterten jsps von jetty verwendet werden. Das Overlay wird von @Randy aktualisiert, um die neuere Implementierung "org.eclipse.jetty.util.resource.ResourceCollection" zu verwenden.

<profiles> 
<profile> 
    <id>jetty</id> 

    <properties> 
     <jetty.docroot>${project.build.directory}/jetty</jetty.docroot> 
     <login.resources>login.res.jsp</login.resources> 
    </properties> 

    <build> 

     <plugins> 

      <plugin> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>3.0.2</version> 
       <executions> 
        <execution> 
         <id>jetty-docroot</id> 
         <!-- test-compile precedes jetty:run --> 
         <phase>test-compile</phase> 

         <goals> 
          <goal>copy-resources</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${jetty.docroot}</outputDirectory> 
          <resources> 
           <resource> 
            <directory>${basedir}/src/main/webapp</directory> 
            <filtering>true</filtering> 
            <includes> 
             <include>**/login.jsp</include> 
             <include>**/index.jsp</include> 
            </includes> 
           </resource> 
          </resources> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 

       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-maven-plugin</artifactId> 
       <version>9.4.0.v20161208</version> 
       <configuration> 

        <scanIntervalSeconds>2</scanIntervalSeconds> 

        <webApp> 
         <contextPath>/intamerge</contextPath> 
         <baseResource implementation="org.eclipse.jetty.util.resource.ResourceCollection"> 

          <resourcesAsCSV>${jetty.docroot},${basedir}/src/main/webapp</resourcesAsCSV> 
          </baseResource> 
         <baseAppFirst>false</baseAppFirst> 
        </webApp> 


       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</profile> 

Verwandte Themen