복붙노트

[SPRING] Maven 프로젝트 용 애플리케이션 설정 파일은 어디에 두어야하나요?

SPRING

Maven 프로젝트 용 애플리케이션 설정 파일은 어디에 두어야하나요?

Maven Application Assembler 플러그인을 사용하여 Java 프로젝트에서 독립 실행 파일을 생성합니다. 응용 프로그램은 Spring 파일을 포함하여 구성 파일을 읽습니다. Application Assembler 플러그인에는 응용 프로그램의 클래스 경로에 etc / 디렉토리를 추가하는 옵션이 있습니다 (기본적으로 활성화 됨). 플러그인이 내 구성 파일을이 디렉토리에 복사하도록하려면 어떻게해야합니까?

또는 더 일반적으로, Maven의 어디에 artifact에 패키징되어서는 안되는 애플리케이션 구성 파일의 위치가 더 좋습니까?

해결법

  1. ==============================

    1.리소스 필터링을 사용할 수도 있습니다. http://maven.apache.org/guides/getting-started/index.html#How_do_I_filter_resource_files

    리소스 필터링을 사용할 수도 있습니다. http://maven.apache.org/guides/getting-started/index.html#How_do_I_filter_resource_files

    필터링 사용 :

    ...
    <build>
    ...
    <resources>
          <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
          </resource>
        </resources>
    ...
    </build>
    ...
    

    다음과 같이 src / main / resources 아래에 파일을 만듭니다. application.properties

    application.properties

    configprop.1=${param1}
    configprop.2=${param2}
    

    그런 다음 settings.xml에서 프로필을 설정하고 일부 속성을 설정하십시오. 이것은 dev 또는 프로덕션 빌드인지에 따라 다른 속성을 설정합니다. 참조 : http://maven.apache.org/guides/introduction/introduction-to-profiles.html

    이 빌드 서버, dev 또는 프로덕션 배포에 따라 다른 속성이 설정되어 있습니다.

    mvn -Denv = dev || mvn -Denv = dev-build || mvn -Denv = 생산

    메이븐 링크는 꽤 좋은 설명을 가지고있다.

  2. ==============================

    2.최근에이 프로젝트에 오게 된 사람들에게는 Application Assembler Plugin 버전 1.1부터 선택적 매개 변수 인 configurationSourceDirectory 및 copyConfigurationDirectory가 있습니다. 아래의 예제 POM.xml에서 해당 항목을 찾으십시오.

    최근에이 프로젝트에 오게 된 사람들에게는 Application Assembler Plugin 버전 1.1부터 선택적 매개 변수 인 configurationSourceDirectory 및 copyConfigurationDirectory가 있습니다. 아래의 예제 POM.xml에서 해당 항목을 찾으십시오.

    <configuration>
      <!-- Set the target configuration directory to be used in the bin scripts -->
      <configurationDirectory>conf</configurationDirectory>
      <!-- Copy the contents from "/src/main/config" to the target
          configuration directory in the assembled application -->
      <copyConfigurationDirectory>true</copyConfigurationDirectory>
      <!-- Include the target configuration directory in the beginning of
          the classpath declaration in the bin scripts -->
      <includeConfigurationDirectoryInClasspath>
        true
      </includeConfigurationDirectoryInClasspath>
    ...
    </configuration>
    

    자세한 정보는 여기에 있습니다.

  3. ==============================

    3.Maven 어셈블리 플러그인을 사용해 볼 수 있습니다. appassembler 플러그인과 함께 사용했습니다.

    Maven 어셈블리 플러그인을 사용해 볼 수 있습니다. appassembler 플러그인과 함께 사용했습니다.

    'etc'를 원하지 않으면 appassembler가 구성 디렉토리에 원하는 이름을 가리 키도록 구성하십시오. 어셈블리 플러그인은 자체 출력 디렉토리에 모든 것을 어셈블합니다. 그래서 어셈블리 플러그인을 구성하여 bin 디렉토리와 repo 디렉토리를 appassembler 디렉토리에서 출력 디렉토리로 복사 한 다음 config 파일을 복사합니다 (내 src / main / config에 있음). )를 예상 된 config 디렉토리에 추가하십시오. appassembler 결과물을 복사하기 때문에 중복되는 부분이 있습니다.하지만 그 점이 저를 괴롭히지는 않았습니다.

    어셈블리 플러그인을 실행 한 후 bin, repo 및 config dir은 어셈블리 출력 디렉토리 아래에있는 모든 피어 디렉토리입니다. 원하는 경우 다른 구조로 구성 할 수 있습니다. 필자는 광산이 appassembler 구조를 미러링하기를 원했습니다.

    좋은 점은 바이너리를 실행 파일로 변경하기 위해 어셈블리 플러그인을 구성 할 수 있다는 것입니다. 실행 파일은 appassembler를 사용하는 방법을 볼 수 없습니다. 그리고 appassembler : assemble과 assembly : 패키지 단계에 대한 단일 목표를 바인딩하면 'mvn package'만 있으면됩니다. 모든 것이 어셈블됩니다.

  4. ==============================

    4.내가 너를 정확하게 이해하는지 모르겠다. 하지만 설정 파일을 복사해야했던 프로젝트에서 필자가 과거에했던 일은 Maven AntRun 플러그인을 사용하는 것입니다. 내가 한 일은 프로세스 리소스 단계에서 플러그인을 실행하고 Ant 복사 작업을 사용하여 지정된 디렉토리에 구성 파일을 복사하는 것입니다. Assembler 플러그인은 패키지 단계에서 실행되므로 올바른 위치에 배치하면 구성 파일을 선택해야합니다. 희망이 조금 귀하의 질문에 대한 답변.

    내가 너를 정확하게 이해하는지 모르겠다. 하지만 설정 파일을 복사해야했던 프로젝트에서 필자가 과거에했던 일은 Maven AntRun 플러그인을 사용하는 것입니다. 내가 한 일은 프로세스 리소스 단계에서 플러그인을 실행하고 Ant 복사 작업을 사용하여 지정된 디렉토리에 구성 파일을 복사하는 것입니다. Assembler 플러그인은 패키지 단계에서 실행되므로 올바른 위치에 배치하면 구성 파일을 선택해야합니다. 희망이 조금 귀하의 질문에 대한 답변.

  5. ==============================

    5.나는 당신의 질문 또는 적어도 매우 비슷한 질문이라고 생각하는 것에 대한 해답을 찾고있었습니다. Maven을 사용하면 maven-resources-plugin을 사용하여 리소스에 대한 디렉토리를 지정할 수 있습니다. 내 리소스 디렉토리 중 하나에 몇 가지 구성 파일이 있습니다. 그 파일의 복사본을 당신이 언급 한 etc / 디렉토리 (CLASSPATH의 시작 부분에 있음)에 넣음으로써 런타임에 사용할 파일의 값을 변경할 수 있다는 것을 알았습니다. 그런 다음 기본적으로 내 리소스 디렉토리의 모든 복사본을 사용하여 etc / 디렉토리를 만들었 으면합니다. maven-resources-plugin의 copy-resources 목표는 저를 그렇게 할 수있게 해주었습니다. 예제> 왼쪽 사이드 바에있는 자원 복사 (이 글에서는 2 개의 링크로 제한되어 있음)의 절이 나를 위해 무엇을 했는가?

    나는 당신의 질문 또는 적어도 매우 비슷한 질문이라고 생각하는 것에 대한 해답을 찾고있었습니다. Maven을 사용하면 maven-resources-plugin을 사용하여 리소스에 대한 디렉토리를 지정할 수 있습니다. 내 리소스 디렉토리 중 하나에 몇 가지 구성 파일이 있습니다. 그 파일의 복사본을 당신이 언급 한 etc / 디렉토리 (CLASSPATH의 시작 부분에 있음)에 넣음으로써 런타임에 사용할 파일의 값을 변경할 수 있다는 것을 알았습니다. 그런 다음 기본적으로 내 리소스 디렉토리의 모든 복사본을 사용하여 etc / 디렉토리를 만들었 으면합니다. maven-resources-plugin의 copy-resources 목표는 저를 그렇게 할 수있게 해주었습니다. 예제> 왼쪽 사이드 바에있는 자원 복사 (이 글에서는 2 개의 링크로 제한되어 있음)의 절이 나를 위해 무엇을 했는가?

    <project>
      ...
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
            <executions>
              <execution>
                <id>copy-resources</id>
                <!-- here the phase you need -->
                <phase>validate</phase>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
                <configuration>
                  <outputDirectory>${basedir}/target/extra-resources</outputDirectory>
                  <resources>          
                    <resource>
                      <directory>src/non-packaged-resources</directory>
                      <filtering>true</filtering>
                    </resource>
                  </resources>              
                </configuration>            
              </execution>
            </executions>
          </plugin>
        </plugins>
        ...
      </build>
      ...
    </project>
    
  6. from https://stackoverflow.com/questions/465001/where-should-i-put-application-configuration-files-for-a-maven-project by cc-by-sa and MIT license