Eclipse에는 증분 빌드라는 개념이 있으며 이는 많은 시간을 절약 할 수 있기 때문에 매우 유용합니다.
이것이 어떻게 유용합니까?
단일 .java 파일을 변경했다고 가정합니다. 증분 빌더는 모든 것을 다시 컴파일하지 않고도 코드를 컴파일 할 수 있습니다 (더 많은 시간이 소요됨).
이제 Maven 플러그인의 문제점은 무엇입니까?
대부분의 maven 플러그인은 증분 빌드 용으로 설계되지 않았으므로 m2e에 문제가 발생합니다. m2e는 플러그인 목표가 중요한 것인지 또는 관련이없는 것인지 알지 못합니다. 단일 파일이 변경 될 때 모든 플러그인을 실행하면 많은 시간이 걸립니다.
이것이 m2e가 메타 데이터 정보에 의존하여 실행이 어떻게 처리되어야하는지 파악하는 이유입니다. m2e는이 메타 데이터 정보를 제공하기 위해 다양한 옵션을 제시했으며 선호하는 순서는 다음과 같습니다.
- 프로젝트의 pom.xml 파일
- 부모, 조부모 등 pom.xml 파일
- [m2e 1.2+] 작업 공간 환경 설정
- 설치된 m2e 확장
- [m2e 1.1+] maven 플러그인에서 제공하는 라이프 사이클 매핑 메타 데이터
- m2e와 함께 제공되는 기본 수명주기 매핑 메타 데이터
1,2는 pom 파일 또는 그 부모의 태그에 pluginManagement 섹션을 지정하는 것을 나타냅니다. M2E는이 구성을 읽고 프로젝트를 구성합니다. 아래 스 니펫은 m2e가 yuicompressor-maven-plugin 의 jslint
및 compress
목표 를 무시하도록 지시합니다.
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
3)이 메타 데이터로 pom 파일을 오염시키는 것을 선호하지 않는 경우이를 외부 XML 파일 (옵션 3)에 저장할 수 있습니다. 다음은 m2e가 yuicompressor-maven-plugin 의 jslint
및 compress
목표 를 무시하도록 지시하는 샘플 매핑 파일입니다.
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore/>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
4) 위 3 가지 옵션 중 마음에 들지 않는 경우 maven 플러그인에 m2e 커넥터 (확장자)를 사용할 수 있으며 커넥터는 m2e에 메타 데이터를 제공합니다. 이 링크 에서 커넥터 내 메타 데이터 정보의 예를 볼 수 있습니다 . 메타 데이터가 구성자를 참조한다는 것을 눈치 채 셨을 것입니다. 이것은 단순히 m2e가 확장 작성자가 제공하는 특정 Java 클래스에 책임을 위임한다는 것을 의미합니다. 구성자는 프로젝트를 구성 (예 : 추가 소스 폴더 추가 등)하고 증분 빌드 중에 실제 maven 플러그인을 실행할지 여부를 결정할 수 있습니다 ( 구성자 내에서 제대로 관리되지 않으면 끝없는 프로젝트 빌드로 이어질 수 있습니다.)
구성 기 ( link1 , link2 ) 의 예는이 링크를 참조하십시오 . 따라서 플러그인이 외부 커넥터를 통해 관리 할 수있는 것이라면 설치할 수 있습니다. m2e는 다른 개발자가 제공 한 이러한 커넥터 목록을 유지 관리하며이를 검색 카탈로그라고합니다. 옵션 (1-6)을 통해 실행을위한 라이프 사이클 매핑 메타 데이터가 아직없고 검색 카탈로그에 실행을 관리 할 수있는 일부 확장이있는 경우 m2e는 커넥터를 설치하라는 메시지를 표시합니다.
아래 이미지는 m2e가 build-helper-maven-plugin 용 커넥터를 설치하라는 메시지를 표시하는 방법을 보여줍니다.
.
5) m2e는 플러그인 작성자가 증분 빌드를 지원하고 maven-plugin 자체 내에서 수명주기 매핑을 제공하도록 장려합니다. 이는 사용자가 추가 수명주기 매핑 또는 커넥터를 사용할 필요가 없음을 의미합니다. 일부 플러그인 작성자는 이미이를 구현했습니다.
6) 기본적으로 m2e는 maven-compiler-plugin 및 기타 여러 플러그인과 같이 일반적으로 사용되는 대부분의 플러그인에 대한 수명주기 매핑 메타 데이터를 보유합니다.
이제 질문으로 돌아갑니다. 문제를 일으키는 특정 목표에 대해 1, 2 또는 3에서 수명주기 매핑 무시를 제공 할 수 있습니다.