wake-up-neo.com

ressourcen in einer Spring Boot-Anwendung fehlen in der JAR-Datei, wenn Sie Spring Boot Maven Plugin verwenden

Ich verwende Spring-Boot v1.3.0.M5 mit Maven v3.3.3. Ich war in der Lage, meine Spring Boot (Boot) -Anwendung mit diesem Befehl von der Konsole aus auszuführen.

mvn clean package spring-boot:run

Ich musste jedoch meinen pom.xml überarbeiten, um anderen Umgebungs-Builds Rechnung zu tragen. Insbesondere verwende ich Maven-Profile, um die Eigenschaftendateien der Startanwendung zu ändern. Wenn ich jetzt den zuvor erwähnten Befehl ausführte, kann die Startanwendung nicht ausgeführt werden und beschwert sich mit der folgenden Ausnahme.

Verursacht durch: Java.lang.NumberFormatException: Für Eingabezeichenfolge: "$ {MULTIPART.MAXREQUESTSIZE}"

Ich habe eine Eigenschaftendatei unter src/main/resources/config/application.properties. Und diese Eigenschaftendatei enthält eine Reihe von Schlüssel-Wert-Paaren, die wie folgt aussehen.

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

Dann ist mein Build in meinem pom.xml wie folgt definiert.

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

Ich habe festgestellt, dass wenn ich mvn clean package eingebe und in die jar-Datei schaue, die application.properties-Datei sich in der Dose befindet. 

Wenn ich jedoch mvn clean package spring-boot:run eingebe, befindet sich die applications.properties-Datei nicht im jar. Tatsächlich macht nichts unter src/main/resources es in die JAR-Datei.

Dieses Problem ist für mich etwas ärgerlich, denn wenn ich meine Startanwendung über die Befehlszeile ausführen möchte, muss ich jetzt zwei Schritte ausführen.

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

Irgendwelche Ideen, was ich falsch mache?

9
Jane Wayne

Als beschrieben in der Dokumentation fügt mvn spring-boot:run vor Ihrem Klassenpfad src/main/resources hinzu, um das Hot-Reload standardmäßig zu unterstützen. Sie können dies leicht ausschalten 

<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

Versuchen Sie einfach folgendes:

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