web-dev-qa-db-fra.com

les ressources d'une application Spring Boot sont absentes du fichier jar lors de l'utilisation de Spring Boot Maven Plugin

J'utilise Spring-Boot v1.3.0.M5 avec Maven v3.3.3. J'avais l'habitude de pouvoir exécuter mon application Spring Boot (boot) à partir de la console avec cette commande.

mvn clean package spring-boot:run

Cependant, j'ai dû réviser mon pom.xml pour tenir compte de différentes générations d'environnement. 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 mentionnée précédemment, l'application de démarrage ne parvient pas à s'exécuter et se plaint de l'exception suivante.

Causée par: Java.lang.NumberFormatException: pour la chaîne de saisie: "$ {MULTIPART.MAXREQUESTSIZE}"

J'ai un fichier de propriétés situé à 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, ma construction est définie 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>

J'ai remarqué que si je saisis mvn clean package et regarde à l'intérieur du fichier jar, le fichier application.properties est à l'intérieur du fichier jar. 

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

Ce problème est un peu gênant pour moi car si je veux exécuter mon application de démarrage à partir de la ligne de commande, je dois maintenant effectuer deux étapes.

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

Des idées sur ce que je fais mal?

9
Jane Wayne

Comme décrit dans la documentationmvn spring-boot:run ajoute src/main/resources devant votre chemin de classe pour prendre en charge le rechargement à chaud par défaut. Vous pouvez désactiver cela 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>
9
Stephane Nicoll

Essayez juste ceci:

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