source

Spring Boot Maven 플러그인을 사용하는 경우 Spring Boot 애플리케이션의 리소스가 jar 파일에서 누락됨

factcode 2023. 6. 28. 22:01
반응형

Spring Boot Maven 플러그인을 사용하는 경우 Spring Boot 애플리케이션의 리소스가 jar 파일에서 누락됨

Spring-Boot v1.3.0을 사용하고 있습니다.M5와 메이븐 v3.3.3.3.이전에는 이 명령을 사용하여 콘솔에서 Spring Boot(부팅) 응용 프로그램을 실행할 수 있었습니다.

mvn clean package spring-boot:run

하지만, 나는 나의 것을 수정해야 했습니다.pom.xml다양한 환경 구축을 설명합니다.특히 부팅 애플리케이션의 속성 파일을 수정하기 위해 메이븐 프로필을 사용하고 있습니다.앞에서 언급한 명령을 실행하면 부팅 응용 프로그램이 실행되지 않고 다음과 같은 예외가 발생합니다.

원인: java.lang.번호 형식 예외:입력 문자열의 경우: "${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파일이 병 안에 있습니다.

하지만, 제가 입력을 하면,mvn clean package spring-boot:run그 다음에applications.properties파일이 병 안에 없습니다.사실, 아래에는 아무것도 없습니다.src/main/resourcesjar 파일로 만듭니다.

명령줄에서 부팅 응용 프로그램을 실행하려면 지금 두 단계를 수행해야 하기 때문에 이 문제는 저에게 조금 성가신 문제입니다.

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

제가 무엇을 잘못하고 있는지에 대한 아이디어가 있나요?

설명서에 설명된 대로 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>

이것만 사용해 보십시오.

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

Spring Boot 1.3 이후, 예상대로 리소스를 필터링하려면 새로운 리소스를 사용해야 합니다.@@형식:

some.key = @value@

클래식 대신:

some.key = ${value}

관련 스프링 부트 문제: https://github.com/spring-projects/spring-boot/issues/980

언급URL : https://stackoverflow.com/questions/33197230/resources-in-a-spring-boot-application-are-missing-from-jar-file-when-using-spri

반응형