2015-10-18 11 views
6

Utilizzo Spring-Boot v1.3.0.M5 con Maven v3.3.3. Ero abituato a eseguire la mia applicazione Spring Boot (boot) dalla console con questo comando.in un'applicazione Spring Boot non sono presenti nel file jar quando si utilizza il plug-in Maven Spring Boot

mvn clean package spring-boot:run

Tuttavia, ho dovuto rivedere la mia pom.xml per tenere conto di ambiente diverso costruisce. In particolare, sto usando i profili Maven per modificare i file delle proprietà dell'applicazione di avvio. Ora quando eseguo il comando menzionato in precedenza, l'applicazione di avvio non riesce a funzionare e si lamenta con la seguente eccezione.

Causato da: java.lang.NumberFormatException: Per stringa di input: "$ {} MULTIPART.MAXREQUESTSIZE"

ho una proprietà di file che si trova a src/main/resources/config/application.properties. E questo file di proprietà ha un sacco di coppie chiave-valore che assomigliano al seguente.

Quindi nel mio pom.xml, la mia build è definita come segue.

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>**/*.properties</include> 
      </includes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>false</filtering> 
      <excludes> 
       <exclude>**/*.properties</exclude> 
      </excludes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 
<profiles> 
    <!-- development --> 
    <profile> 
     <id>env-dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
      <property> 
       <name>env</name> 
       <value>dev</value> 
      </property> 
     </activation> 
     <properties> 
      <multipart.maxFileSize>250MB</multipart.maxFileSize> 
      <multipart.maxRequestSize>250MB</multipart.maxRequestSize> 
     </properties> 
    </profile> 
    <!-- staging --> 
    <profile> 
     <id>env-stg</id> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
      <property> 
       <name>env</name> 
       <value>stg</value> 
      </property> 
     </activation> 
     <properties> 
      <multipart.maxFileSize>500MB</multipart.maxFileSize> 
      <multipart.maxRequestSize>500MB</multipart.maxRequestSize> 
     </properties> 
    </profile> 
<profiles> 

ho notato che se digito mvn clean package e guardare all'interno del file jar, il file application.properties è all'interno del vaso.

Tuttavia, se digito mvn clean package spring-boot:run, allora il file non è applications.properties all'interno del vaso. Infatti, nulla sotto src/main/resources lo inserisce nel file jar.

Questo problema è un po 'fastidioso per me, perché se voglio eseguire la mia applicazione di avvio dalla riga di comando, devo fare due passaggi ora.

  1. mvn clean package
  2. java -jar ./target/app-0.0.1-SNAPSHOT.jar

Tutte le idee su quello che sto facendo male?

risposta

7

Come described in the documentationmvn spring-boot:run aggiunge src/main/resources davanti al classpath per supportare ricarica caldo per impostazione predefinita. È possibile disattivarlo facilmente

<build> 
    ... 
    <plugins> 
    ... 
    <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
     <version>1.2.7.RELEASE</version> 
     <configuration> 
     <addResources>false</addResources> 
     </configuration> 
    </plugin> 
    ... 
    </plugins> 
    ... 
</build> 
+0

Ho provato ad aggiornare la mia versione spring-boot a 1.3.2.RELEASE, e ora la soluzione che hai proposto si rompe.I file delle proprietà vengono copiati ma il build Maven non sostituisce i valori delle proprietà. La documentazione a cui mi hai riferito dice anche: "Si noti che un effetto collaterale dell'utilizzo di questa funzione è che il filtraggio delle risorse in fase di compilazione non funzionerà." Qualche idea? Non volevo postare una nuova domanda. –

+0

[Leggi le note di rilascio] (https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.3-Release-Notes#maven-resources-filtering)? Non penso che questo abbia niente a che fare con il tuo problema. Questo è solo il controllo di ciò che accade quando esegui l'app usando il plugin Maven. –

+0

trovo la stessa domanda con te e come la aggiusti? – Chevalier

1

provare solo questo:

<resources> 
     <resource> 
      <directory>src/main/resources/config</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>**/*.properties</include> 
      </includes> 
     </resource> 
</resources> 
+0

Questo è stato il primo tentativo che ho fatto, e non ha funzionato. Con ciò ottengo questa eccezione: 'FileNotFoundException: risorsa percorso classe [config/custom-application.properties] non può essere aperto perché non esiste'. Si noti che, oltre al file 'application.properties' di Spring Boot, ho un altro file aggiuntivo' custom-application.properties' anche nella directory 'src/main/resources/config' (sto effettivamente caricando questo file delle proprietà su manualmente). Grazie, ma questo non funziona o aiuta. Di nuovo, nulla in 'src/main/resources' viene copiato nel jar o nella directory' target/classes'. –

+0

Questa soluzione ha funzionato per me. Ho avuto alcuni file .jrxml che volevo includere. – fernandodof