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입니다.
GO TO FULL VERSION