2011-01-21 7 views
20

quando creo un pacchetto war con maven, i file e le directory nella directory "src/main/resources" sono copiati in/WEB-INF/classes invece di/WEB-INF. Come posso averli copiati in/WEB-INF?Maven: come ottenere un pacchetto di guerra con risorse copiate in WEB-INF?

grazie, rand

UPDATE: nel mio pom Ora uso questo:

<plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.4.3</version> 
      <executions> 
       <execution> 
        <id>copy-resources</id> 
        <!-- here the phase you need --> 
        <phase>war</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>myapp/target/WEB-INF</outputDirectory> 
         <resources> 
          <resource> 
           <directory>src/main/resources</directory> 
           <filtering>true</filtering> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

e mi lancio mvn con:

mvn -Dmaven.test.skip = true clean package resources: copy-resources

ma ho ottenuto: [INFO] Uno o più parametri obbligatori di plugin non sono validi/mancante per 'risorse: copy-risorse

[0] Dentro la definizione per plugin 'Maven-risorse-plug' specificare quanto segue:

... VALUE .

[1] All'interno la definizione per plugin 'Maven-risorse-plug' specificare quanto segue:

... VALORE .

Sto usando Maven 2.2 e lo snippet è fondamentalmente lo stesso della documentazione qualche idea?

+0

non eseguire l'obiettivo 'resources: copy-resources', è automaticamente incluso nella fase' copy-resources' (laggiù nella mia risposta) – coubeatczech

risposta

27

o configurare il parametro outputDirectory del plug-in resources:resources oppure inserire i file nella directory src/main/webapp/WEB-INF/. resource plugin

EDIT:

Questa configurazione sta lavorando per me:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.4.2</version> 
    <executions> 
     <execution> 
     <id>default-copy-resources</id> 
     <phase>process-resources</phase> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
      <overwrite>true</overwrite> 
      <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/</outputDirectory> 
      <resources> 
      <resource> 
       <directory>${project.basedir}/src/main/resources</directory> 
      </resource> 
      </resources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

è possibile eseguire una fase in forma somePhase o un obiettivo somePlugin:someGoal. Le invocazioni di fase invocheranno tutti gli obiettivi dei plug-in agganciati alle fasi nell'intervallo [convalida, fase] in ordine, quindi non è necessario chiamarli esplicitamente.

+0

grazie per la risposta, controlla la mia risposta nell'aggiornamento sopra – Randomize

+0

Si può usare anche il '$ {project.build.finalName}' invece di '$ {project.artifactId} - $ {project.version}' per ottenere il nome del manufatto. – ivanjovanovic

24

Le risorse Web non sono le stesse risorse java, che devono essere posizionate nel classpath. Le risorse Web vengono elaborate tramite il plug-in di guerra e devono essere inserite in src\main\webapp\WEB-INF\. In questo caso, funzionerà automaticamente senza alcuna configurazione aggiuntiva nel pom.xml

+0

Ma, come trattare con 'java resource', se non è schierato automaticamente nella sua posizione richiesta? – Eddy

+0

@Eddy Se non viene distribuito nel "luogo richiesto", molto probabilmente significa che lo si inserisce nel posto sbagliato di un codice sorgente.Fornisci maggiori dettagli. – kan

+0

Hai ragione! In questo caso: quando usi Maven ed esegui 'mvn clean'. quindi Maven non lo ridistribuirà per me quando metto risorse in 'src/main/java' invece di' src/main/resources'. Sto usando Eclipse. – Eddy

Problemi correlati