2.1 maven-resources-plugin 리소스 복사 플러그인

웹 애플리케이션을 구축하는 경우 다양한 리소스가 포함됩니다. jar 라이브러리, jsp 서블릿, 설정 파일입니다. 물론 이것은 html, css, 와 같은 정적 파일 js과 다양한 사진입니다.

기본적으로 프로젝트를 빌드할 때 Maven은 폴더에서 src/main/resources대상 디렉터리로 모든 파일을 복사합니다. 이 동작을 변경하려면 플러그인이 도움이 될 것입니다 maven-resources-plugin.

이러한 플러그인의 샘플 코드:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <id>copy-resources</id>
            <phase>validate</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>
                   ${basedir}/target/resources
                </outputDirectory>
                <resources>
                    <resource>  instructions for copying a resource 1 </resource>
                    <resource>  instructions for copying a resource 2 </resource>
                    <resource>  instructions for copying a resource N </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

이 플러그인은 유효성 검사 단계에서 호출됩니다. 태그를 사용하여 <outputDirectory>플러그인이 에 지정된 리소스를 복사해야 하는 디렉터리를 설정할 수 있습니다 <resources>. 그리고 이것은 플러그인이 모든 힘을 발휘할 수 있는 곳입니다.

2.2 maven-resources-plugin으로 리소스 필터링

플러그인 리소스는 파일 형태뿐만 아니라 디렉토리 형태로도 바로 지정할 수 있습니다. 또한 이 리소스에 포함될 파일을 지정하는 마스크를 디렉터리에 추가할 수 있습니다.

예:


            <resource>
                <directory>src/main/resources/images</directory>
                <includes>
                     <include>**/*.png</include>
                </includes>
            </resource>

마스크로 사용되는 두 개의 별표는 디렉토리 수를 나타냅니다 . 위의 예에서 디렉토리 src/main/resources/images(및 하위 디렉토리)에 포함된 모든 png 파일은 리소스 데이터로 간주됩니다.

일부 파일을 제외하려면 exclude. 예:

<resource>
    <directory>src/main/resources/images</directory>
    <includes>
        <include>**/*.png</include>
    </includes>
    <excludes>
         <exclude>old/*.png</exclude>
    </excludes>
</resource>

태그는 순차적으로 적용됩니다. 먼저 포함 파일에 지정된 포함 파일이 리소스에 추가된 다음 제외 파일이 이 목록에서 제외됩니다.

하지만 그게 다가 아닙니다. 플러그인은 파일 내부를 볼 수 있습니다(물론 텍스트인 경우). 예를 들어 application.properties필요한 어셈블리 버전을 파일에 추가합니다. 플러그인이 파일 내용을 처리하려면 매개변수를 지정해야 합니다 <filtering>true</filtering>.

예:

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

이 플러그인에 대한 자세한 내용은 https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html 링크에서 확인할 수 있습니다.

2.3 maven-source-plugin 소스 포함 플러그인

또 다른 유용한 플러그인 - maven-source-plugin어셈블리에 Java 파일의 소스 코드를 포함할 수 있습니다. 무엇을 위해?

문제는 웹 애플리케이션 외에도 Maven을 사용하여 매우 많은 수의 라이브러리가 조립된다는 것입니다. 많은 Java 프로젝트가 오픈 소스 개념을 따르고 자체 소스와 함께 Java 커뮤니티에 배포됩니다.

왜 별도의 플러그인이 필요한가요? 왜 소스만 복사하면 안되나요?

첫째, 복잡한 프로젝트에서 소스를 여러 위치에 저장할 수 있습니다.

둘째, xml 사양을 기반으로 하는 소스 생성이 자주 사용되며 이러한 소스도 어셈블리에 포함되어야 합니다.

셋째, 어셈블리에 특별히 비밀 파일을 포함하지 않도록 결정할 수 있습니다.

maven-source-plugin 플러그인 사용 예:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.2.1</version>
    <executions>
        <execution>
            <id>attach-sources</id>
            <phase>verify</phase>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

2.4 maven-dependency-plugin 종속성 복사 플러그인

프로젝트를 빌드할 때 종속성(라이브러리)을 현명하게 복사해야 할 수도 있습니다. 이를 위해 플러그인이 사용됩니다 maven-dependency-plugin.

예:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
        <outputDirectory>
            ${project.build.directory}/lib/
        </outputDirectory>
    </configuration>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
        </execution>
    </executions>
</plugin>

이 예제에서 플러그인의 기본 동작은 라이브러리를 ${project.build.directory}/lib.

실행 섹션은 빌드 단계(패키지, 목표 - 복사 의존성) 중에 플러그인이 호출될 것이라고 명시합니다.

일반적으로 이 플러그인에는 상당히 많은 목표가 있으며 가장 인기 있는 목표는 다음과 같습니다.

1 종속성:분석 종속성 분석(사용됨, 사용되지 않음, 지정됨, 지정되지 않음)
2 종속성:분석-복제 중복 종속성 식별
종속성:해결 모든 종속성의 해결(정의)
4 종속성: 해결 플러그인 모든 플러그인의 권한(정의)
5 종속성:트리 종속성 트리 표시

구성 섹션에서 추가 매개변수를 설정할 수도 있습니다.

1 출력 디렉토리 의존성이 복사될 디렉토리
2 overWrite릴리스 릴리스를 생성할 때 종속성을 덮어쓰는 플래그
overWriteSnapshots SNAPSHOT이 있는 비단말 종속성을 덮어쓰는 플래그
4 overWriteIfNewer 최신 버전으로 라이브러리를 덮어쓰도록 플래그 지정

예:


<configuration>
    <outputDirectory>
         ${project.build.directory}/lib/
    </outputDirectory>
    <overWriteReleases>false</overWriteReleases>
    <overWriteSnapshots>false</overWriteSnapshots>
    <overWriteIfNewer>true</overWriteIfNewer>
 </configuration>

기본적으로 <overWriteReleases>, 및 <overWriteSnapshots>는 false이고 는 <overWriteIfNewer>true입니다.