[maven] 라이프 사이클 구성에 포함되지 않는 플러그인 실행 (JBossas 7 EAR 아키 타입)

Maven M2E Plugin 1.0.100과 함께 Eclipse 3.7 Indigo를 사용하고 있습니다.

JBoss 7.x JavaEE 6 EAR archetype을 사용하면 EAR에 대한 pom이 다음 오류를 제공합니다.

수명주기 구성에 포함되지 않는 플러그인 실행 : org.apache.maven.plugins : maven-ear-plugin : 2.6 : generate-application-xml (실행 : default-generate-application-xml, 단계 : generate-resources)

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-ear-plugin</artifactId>
   <version>2.6</version>
   <configuration>
      <!-- Tell Maven we are using Java EE 6 -->
      <version>6</version>
      <!-- Use Java EE ear libraries as needed. Java EE ear libraries 
                  are in easy way to package any libraries needed in the ear, and automatically 
                  have any modules (EJB-JARs and WARs) use them -->
      <defaultLibBundleDir>lib</defaultLibBundleDir>
      <modules></modules>
   </configuration>
<plugin>



답변

이것은 얼마 전에 소개 된 M2E 플러그인의 “기능”입니다. JBoss EAR 플러그인과 직접 관련이 없지만 대부분의 다른 Maven 플러그인에서도 발생합니다.

에 정의 된 플러그인 실행이있는 경우 pom(예 maven-ear-plugin:generate-application-xml:), 빌드가 Eclipse에서 실행될 때 수행 할 작업을 M2E에 알려주는 M2E에 대한 추가 구성 정보를 추가해야합니다 (예 : 플러그인 실행이 무시되거나 실행되는 경우). M2E, 증분 빌드에 대해서도 수행해야하는 경우 … 해당 정보가 누락 된 경우 M2E는 다음 오류 메시지를 표시하여 이에 대해 불평합니다.

“라이프 사이클 구성에 포함되지 않는 플러그인 실행”

자세한 설명과 해당 오류를 없애기 위해 pom에 추가해야하는 몇 가지 샘플 구성은 여기를 참조하세요.

https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html


답변

어쨌든 너무 늦었지만 내 솔루션은 Eclipse에서 오류 메시지를 마우스 오른쪽 버튼으로 클릭하고 Quick Fix >> Ignore for every pom with such errors를 선택하는 것이 었습니다.


답변

Eclipse에는 증분 빌드라는 개념이 있으며 이는 많은 시간을 절약 할 수 있기 때문에 매우 유용합니다.

이것이 어떻게 유용합니까?

단일 .java 파일을 변경했다고 가정합니다. 증분 빌더는 모든 것을 다시 컴파일하지 않고도 코드를 컴파일 할 수 있습니다 (더 많은 시간이 소요됨).

이제 Maven 플러그인의 문제점은 무엇입니까?

대부분의 maven 플러그인은 증분 빌드 용으로 설계되지 않았으므로 m2e에 문제가 발생합니다. m2e는 플러그인 목표가 중요한 것인지 또는 관련이없는 것인지 알지 못합니다. 단일 파일이 변경 될 때 모든 플러그인을 실행하면 많은 시간이 걸립니다.

이것이 m2e가 메타 데이터 정보에 의존하여 실행이 어떻게 처리되어야하는지 파악하는 이유입니다. m2e는이 메타 데이터 정보를 제공하기 위해 다양한 옵션을 제시했으며 선호하는 순서는 다음과 같습니다.

  1. 프로젝트의 pom.xml 파일
  2. 부모, 조부모 등 pom.xml 파일
  3. [m2e 1.2+] 작업 공간 환경 설정
  4. 설치된 m2e 확장
  5. [m2e 1.1+] maven 플러그인에서 제공하는 라이프 사이클 매핑 메타 데이터
  6. m2e와 함께 제공되는 기본 수명주기 매핑 메타 데이터

1,2는 pom 파일 또는 그 부모의 태그에 pluginManagement 섹션을 지정하는 것을 나타냅니다. M2E는이 구성을 읽고 프로젝트를 구성합니다. 아래 스 니펫은 m2e가 yuicompressor-maven-plugin 의 jslintcompress목표 를 무시하도록 지시합니다.

<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 의 jslintcompress목표 를 무시하도록 지시하는 샘플 매핑 파일입니다.

<?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에서 수명주기 매핑 무시를 제공 할 수 있습니다.


답변

프로젝트가 오 탐지 오류 마커를 상속하지 않고도 m2e를 더 잘 구성 할 수 있음을 상기시키는 좋은 해결 방법은 해당 오류를 경고로 다운 그레이드하는 것입니다.

창-> 환경 설정-> Maven-> 오류 / 경고-> 라이프 사이클 구성에 포함되지 않는 플러그인 실행 = 경고


답변

정리 후 바로 특정 플러깅을 실행하려고했습니다. 즉, 사후 정리 (기본값은 정리 단계)입니다. 이것은 일식 인디고로 나를 위해 일했습니다. 방금 추가 된 청소 후 문제가 해결되었습니다.

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 


답변

이 솔루션을 적용하여 Eclipse Kepler 4.3에서 maven-antrun-plugin 및 jaxb2-maven-plugin으로 동일한 문제를 해결할 수있었습니다.
http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
그래서 내 %의 내용 elipse_workspace_name % /. metadata / .plugins / org.eclipse.m2e.core / lifecycle-mapping-metadata.xml은 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
  <pluginExecutions>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <versionRange>1.3</versionRange>
        <goals>
          <goal>run</goal>
        </goals>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <versionRange>1.2</versionRange>
        <goals>
          <goal>xjc</goal>
        </goals>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
  </pluginExecutions>
</lifecycleMappingMetadata>

* Eclipse를 다시 시작해야 오류가 사라졌습니다.


답변

현재 메이븐 이클립스 (m2e) 버전 0.12 모든 메이븐 라이프 사이클 목표는 설치 m2e 확장에 매핑해야합니다. 이 경우에 maven-ear-plugin매핑되지 않은 목표가 default-generate-application-xml있습니다.

다음 지침에 따라 매핑되지 않은 수명주기 목표를 제외 할 수 있습니다.

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

또는 Eclipse에서 오류 메시지를 마우스 오른쪽 버튼으로 클릭하고 Quick Fix->를 선택하십시오 Ignore for every pom with such errors.

수명주기 목표를 무시할 때주의해야합니다. 일반적으로 목표는 유용한 작업을 수행하며 Eclipse에서 무시하도록 구성하면 중요한 빌드 단계를 놓칠 수 있습니다. 매핑되지 않은 수명주기 목표를 위해 Maven Eclipse EAR 확장에 지원을 추가하는 것을 고려할 수도 있습니다.