web-dev-qa-db-ja.com

Spring Boot Mavenプラグインを使用する場合、Spring Bootアプリケーションのリソースがjarファイルにありません

Maven v3.3.3でSpring-Boot v1.3.0.M5を使用しています。以前は、このコマンドを使用して、コンソールからSpring Boot(ブート)アプリケーションを実行できました。

mvn clean package spring-boot:run

ただし、さまざまな環境のビルドを考慮して、pom.xmlを修正する必要がありました。特に、Mavenプロファイルを使用して、ブートアプリケーションのプロパティファイルを変更しています。ここで、前述のコマンドを実行すると、ブートアプリケーションの実行に失敗し、次の例外が表示されます。

原因:Java.lang.NumberFormatException:入力文字列の場合: "$ {MULTIPART.MAXREQUESTSIZE}"

src/main/resources/config/application.propertiesにプロパティファイルがあります。また、このプロパティファイルには、次のような一連のキーと値のペアがあります。

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

それから私のpom.xmlで、私のビルドは次のように定義されます。

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

mvn clean packageと入力してjarファイルの中を見ると、application.propertiesファイルはjarの中にあることに気付きました。

ただし、mvn clean package spring-boot:runと入力すると、applications.propertiesファイルはjar内でnotになります。実際、src/main/resourcesの下では何もjarファイルになりません。

コマンドラインからブートアプリケーションを実行する場合は、2つの手順を実行する必要があるため、この問題は少し面倒です。

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

私が間違っていることに関するアイデアはありますか?

10
Jane Wayne

ドキュメントに記載mvn spring-boot:run追加src/main/resourcesは、デフォルトでホットリロードをサポートするクラスパスの前にあります。これは簡単にオフにできます

<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>
10
Stephane Nicoll

これだけを試してください:

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