2014-11-04 31 views
5

Sto utilizzando la creazione di un'applicazione Web utilizzando l'avvio a molla e desidero generare war invece di jar.Escludi application.properties durante la generazione di war utilizzando spring boot e spring-boot-maven-plugin

funziona molto bene con la conversione da vaso in guerra descritto qui: http://spring.io/guides/gs/convert-jar-to-war/

Ma io voglio escludere le application.properties dalla guerra, perché io uso @PropertySource(value = "file:${OPENSHIFT_DATA_DIR}/application.properties") per ottenere il percorso del file in ambiente di produzione.

  • Questo metodo funziona quando si genera la mia guerra, ma in Eclipse non può funzionare la mia domanda perché application.properties non copiati a tutti di target/classi:

    <build> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>application.properties</exclude> </excludes> </resource> </resources> </build>

  • Questo metodo non funziona affatto, penso che primavera-boot-maven-plugin non supporta packagingExcludes:

    <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <packagingExcludes>WEB-INF/classes/application.properties</packagingExcludes> </configuration> </plugin> </plugins> </build>

Avete un altro suggerimento?

Thnks

+0

il mio approccio a questo problema è quello di appena sovrascrivere la configurazione pacchettizzata usando il parametro 'spring.config.location'. L'ho impostato nel file di contesto di Tomcat ad esempio per fare riferimento al file di configurazione che utilizzo nell'ambiente di produzione. Hai provato a farlo in questo modo o questa soluzione non è l'ideale per te? Oppure potresti forse ottenere esattamente quello che stai cercando di fare usando diversi profili di build Maven per sviluppo e produzione? Voglio dire che application.properties sarebbe escluso solo se hai impacchettato la tua app con il profilo di produzione Maven ... –

+0

Voglio escludere solo application.properties quando impacchetta la mia guerra usando maven, tutto il resto funziona bene. Non voglio eliminare application.properties dopo aver generato la guerra. – amgohan

risposta

2

La soluzione ho aggiunto è quello di decomprimere la mia guerra confezionato, eliminare i application.properties di file e creare una nuova guerra di nome ROOT.war usando Maven-antrun-plugin ed eseguire alcuni compiti formica.

questo è ciò che ho aggiunto ai miei plugin in pom.xml:

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-antrun-plugin</artifactId> 
<executions> 
    <execution> 
     <id>package</id> 
     <phase>package</phase> 
     <configuration> 
      <target> 
       <unzip src="target/${artifactId}-${version}.${packaging}" dest="target/ROOT/" /> 
       <delete file="target/ROOT/WEB-INF/classes/application.properties"/> 
       <zip destfile="target/ROOT.war" basedir="target/ROOT" encoding="UTF-8"/> 
       <delete dir="target/ROOT"/> 
      </target> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
    </execution> 
</executions> 
</plugin> 

ho chiamato il mio obiettivo come la guerra ROOT.war perché sto usando Tomcat su OpenShift PaaS, quindi ho solo copiare il mio ROOT.war e spingo al mio repository openshift. Questo è il

+0

IMHO la risposta giusta. Ne avevo bisogno con una leggera svolta: voglio includere 'application.properties' ma nessuno del mio profilo' application - *. Properties'. E poiché i miei giorni ANT sono finiti da tempo, mi ci è voluto un po 'per capire la sintassi giusta quindi postarlo qui: '' –

2

Quello che ho capito dalla tua domanda è che vuoi usare application.properties per il tuo sviluppo. Ma tu non vuoi usarlo per la produzione.

Suggerirei di utilizzare Profili a molla per raggiungere questo obiettivo. Nel file proprietà

  1. Creare un profilo per lo sviluppo. Metti sotto tutte le tue proprietà di sviluppo.
  2. Non creare un profilo per la produzione nel file delle proprietà.
  3. Durante lo sviluppo, impostare il profilo attivo sullo sviluppo, in modo che le proprietà vengano caricate dal proprio file application.properties.
  4. Quando lo si esegue in produzione, impostare il profilo attivo su Produzione. Sebbene application.properties venga caricato nel WAR, poiché non esiste un profilo per la produzione, nessuna delle proprietà verrà caricata.

Ho fatto qualcosa di simile usando YML. Sono sicuro che ci deve essere un modo per fare la stessa cosa usando il file .properties.

spring: 
    profiles.active: development 
-- 
spring: 
    profiles: development 
something: 
    location: USA 
    unit1: Test1 
    unit2: Test2 

si potrebbe cambiare il profilo in fase di esecuzione utilizzando

-Dspring.profiles.active=production 
+0

sì e no. Se si archiviano i file delle proprietà del profilo in src/main/resources, non è possibile caricarli da un classloader genitore (come inserendoli in $ TCHOME/lib) poiché sono già in bundle nella WAR stessa –

1

Provate a utilizzare questa soluzione:

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <version>${spring.version}</version> 
    <configuration> 
     <addResources>false</addResources> 
    </configuration> 
</plugin> 

<addResources> falsi </addResources > vi terremo proprietà quando si esegue mvn spring-boot: eseguire

4

Prova a utilizzare la soluzione di seguito. Ciò funzionerà:

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <excludes> 
       <exclude>**/*.properties</exclude> 
      </excludes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

Se si utilizza la soluzione di cui sopra, durante l'esecuzione del progetto in Eclipse IDE si può ottenere errore che il file delle proprietà non viene trovato. Per eliminare questo è necessario aggiungere la cartella delle risorse in Esegui come configurazione. (Esegui configurazioni ... -> Classpath -> Voci utente -> Avanzate ... -> Aggiungi cartelle)

1

Quando si esegue in Eclipse, a vostra configurazione di esecuzione, è necessario specificare il percorso dei propeties alla primavera Boot:

--spring.config.location=${workspace_loc:/YOURPROYECTNAME}/src/main/resources/ 
0

si è mantenere la risorsa application.properites anche dopo la generazione di pacchetto jar anche con <addResources>false</addResources>

Problemi correlati