2015-10-18 3 views
6

J'utilise Spring-Boot v1.3.0.M5 avec Maven v3.3.3. J'avais l'habitude d'exécuter mon application Spring Boot (boot) depuis la console avec cette commande.ressources dans une application de démarrage Spring sont manquantes dans le fichier jar lors de l'utilisation Spring Boot Maven Plugin

mvn clean package spring-boot:run

Cependant, j'ai dû réviser mon pom.xml pour tenir compte de l'environnement différent construit. En particulier, j'utilise des profils Maven pour modifier les fichiers de propriétés de l'application de démarrage. Maintenant, lorsque j'exécute la commande précédemment mentionnée, l'application de démarrage ne peut pas s'exécuter et se plaint de l'exception suivante.

Causée par: java.lang.NumberFormatException: Pour chaîne d'entrée: "$ {} MULTIPART.MAXREQUESTSIZE"

J'ai un fichier de propriétés situées à src/main/resources/config/application.properties. Et ce fichier de propriétés a un tas de paires clé-valeur qui ressemble à ce qui suit.

multipart.maxFileSize=${multipart.maxFileSize} 
multipart.maxRequestSize=${multipart.maxRequestSize} 

Ensuite, dans mon pom.xml, mon build est défini comme suit.

<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> 

Je remarqué que si je tape mvn clean package et regarder à l'intérieur du fichier jar, le fichier application.properties est à l'intérieur du pot.

Cependant, si je tape dans mvn clean package spring-boot:run, le fichier est applications.propertiespas à l'intérieur du pot. En fait, rien sous src/main/resources le fait dans le fichier jar.

Ce problème est un peu ennuyeux pour moi parce que si je veux exécuter mon application de démarrage à partir de la ligne de commande, je dois faire deux étapes maintenant.

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

Toutes les idées sur ce que je fais mal?

Répondre

7

Comme described in the documentationmvn spring-boot:run ajoute src/main/resources devant votre classpath pour soutenir reload chaud par défaut. Vous pouvez l'éteindre facilement

<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

J'ai essayé de mettre à jour ma version de spring-boot à 1.3.2.RELEASE, et maintenant la solution que vous avez proposée casse.Les fichiers de propriétés sont copiés mais la génération Maven ne remplace pas les valeurs de propriétés. La documentation que vous m'avez renvoyée indique même 'Notez qu'un effet secondaire de l'utilisation de cette fonctionnalité est que le filtrage des ressources au moment de la construction ne fonctionnera pas. 'Des idées? Je ne voulais pas poster une nouvelle question. –

+0

[Lire les notes de publication] (https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.3-Release-Notes#maven-resources-filtering)? Je ne pense pas que cela ait quelque chose à voir avec votre problème. Cela ne contrôle que ce qui se passe lorsque vous exécutez l'application à l'aide du plugin Maven. –

+0

Je trouve la même question avec vous et comment y remédier? – Chevalier

1

Essayez ceci:

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

C'était le premier essai que j'ai fait, et cela n'a pas fonctionné. Avec cela, je reçois cette exception: 'FileNotFoundException: la ressource de chemin de classe [config/custom-application.properties] ne peut pas être ouverte car elle n'existe pas. Veuillez noter qu'en plus du fichier "application.properties" de Spring Boot, j'ai un fichier additionnel 'custom-application.properties' dans le répertoire' src/main/resources/config' (je charge en fait ce fichier de propriétés manuellement). Merci, mais cela ne fonctionne pas ou n'aide pas. Encore une fois, rien dans 'src/main/resources' n'est copié dans le répertoire jar ou dans le répertoire' target/classes'. –

+0

Cette solution a fonctionné pour moi. J'avais des fichiers .jrxml que je voulais inclure. – fernandodof