programing tip

Maven에서 생성 된 jar에서 리소스를 제외하는 방법은 무엇입니까?

itbloger 2020. 12. 27. 10:26
반응형

Maven에서 생성 된 jar에서 리소스를 제외하는 방법은 무엇입니까?


이 가이드를 사용하여 종속성이있는 실행 가능한 jar를 만들면 모든 속성 파일도 해당 jar에 패키지됩니다. 발생을 막는 방법? 감사.

업데이트 : Maven 리소스 플러그인을 사용하여 제외하려고했지만 Eclipse에서 실행할 때 내 응용 프로그램이 속성 파일을 찾지 못합니다 (모듈-> 실행 도구-> Java 응용 프로그램을 마우스 오른쪽 버튼으로 클릭)

업데이트 : 유용한 답변에 감사드립니다. 나는 Maven을 배우는 데 시간을 보내는 것이 더 좋을 것이라고 생각합니다.


해당 속성 파일을 src/test/resources. 의 파일은 src/test/resourcesEclipse 내에서 자동으로 사용할 수 eclipse:eclipse있지만 Maven의 패키지 JAR에는 포함되지 않습니다.


jar / target 디렉토리에서 파일을 제외하려면 <excludes>pom.xml 파일에서 태그를 사용할 수 있습니다 .

다음 예에서는 .properties확장자가있는 모든 파일 이 포함되지 않습니다.

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>*.properties</exclude>
            </excludes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

규칙에 따라 디렉토리 src/main/resources에는 애플리케이션에서 사용할 리소스가 포함됩니다. 따라서 Maven은 최종 JAR.

따라서 응용 프로그램 getResourceAsStream()에서 리소스가 클래스 경로에로드 되므로 메서드를 사용하여 액세스합니다 .

애플리케이션 외부에 있어야하는 경우 src/main/resourcesMaven에서 번들로 제공하므로 저장하지 마십시오 . 물론 그것들을 제외 할 수 는 있지만 ( chkal에서 제공 한 링크를 사용하여 ) 디렉토리 src/main/external-resources와 관련된 규칙을 유지하려면 다른 디렉토리 (예 :) 를 만드는 것이 좋습니다 src/main/resources.

후자의 경우 리소스를 JAR 파일로 독립적으로 전달해야합니다 (Assembly 플러그인을 사용하여 수행 할 수 있음). 당신이 당신의 이클립스 환경에서 액세스해야하는 경우에 가서 Properties다음에, 프로젝트의 Java Build Path에서 Sources(예를 들어, 폴더를 추가, 탭 src/main/external-resources). Eclipse는이 디렉토리를 클래스 경로에 추가합니다.


에있는 속성 파일을 의미 src/main/resources합니까? 그런 다음 maven-resource-plugin을 사용하여 제외해야합니다. 자세한 내용은 다음 페이지를 참조하십시오.

http://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html


이것은 Maven JAR 플러그인 사용을 정확히 요구합니다.

예를 들어, src/test/resources/최종 항아리에서 모든 항목을 제외하려면 다음을 입력하십시오.

<build>

        <plugins>
            <!-- configure JAR build -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.3.1</version>
                <configuration>
                    <excludes>
                        <exclude>src/test/resources/**</exclude>
                    </excludes>
                </configuration>
            </plugin>

...

아래의 파일 src/test/resources/은 여전히 ​​클래스 경로에서 사용할 수 있으며 결과 JAR에 포함되지 않습니다.


maven-jar-plugin을 사용하여 maven jar를 생성하는 동안 특정 파일 패턴을 제외합니다.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.3</version>
  <configuration>
    <excludes>
      <exclude>**/*.properties</exclude>
      <exclude>**/*.xml</exclude>
      <exclude>**/*.exe</exclude>
      <exclude>**/*.java</exclude>
      <exclude>**/*.xls</exclude>
    </excludes>
  </configuration>
</plugin>

이 가이드를 사용하여 종속성이있는 실행 가능한 jar를 만들면 모든 속성 파일도 해당 jar에 패키지됩니다. 발생을 막는 방법? 감사.

어디에서 속성 파일? 메인 병? 의존성?

전자의 경우 src/test/resources제안 대로 리소스를 배치하는 것이 아마도 가장 간단하고 간단한 옵션 일 것입니다.

나중의 경우 특수한 .NET Framework를 사용하여 사용자 지정 어셈블리 설명자를 만들어야 excludes/exclude합니다 unpackOptions.


또 다른 가능성은 Maven Shade Plugin 을 사용하는 것입니다 . 예를 들어 IDE에서 로컬로만 사용되는 로깅 속성 파일을 제외합니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>${maven-shade-plugin-version}</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>log4j2.xml</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
        </execution>
    </executions>
</plugin>

This will however exclude the files from every artifact, so it might not be feasible in every situation.

ReferenceURL : https://stackoverflow.com/questions/4113697/in-maven-how-to-exclude-resources-from-the-generated-jar

반응형