M2 Eclipse Plugin Execution Not Covered

來源:互聯網
上載者:User

M2 Eclipse Plugin Execution Not Covered

 

Maven項目在構造(build)過程中分很多階段(phase),每個階段都有特定的目標(goal)會執行。M2Eclipse 0.12和早期版本就定義了在eclipse中Maven項目各個階段需要執行的目標。Plugin execution not covered錯誤的產生是因為設定的外掛程式執行(goal)沒有在映射中繼資料源(mapping metadata sources)中找到對應的生命週期映射行為(是執行呢?還是不執行?),也就是說這個m2e不知道要不要執行這個goal。

這些goals有些配置在工作空間(workspace)層級,有些在project/.settings中。但問題是這些goals並不是對所有的項目都有效,因此我們以前不得不需要重新整理或更新依賴關係,更新配置和重新構造,使項目達到一個良好的狀態。

而導致這些問題的原因主要有兩個:

1. Maven外掛程式構造了一些不在工作空間(workspace)的資源,有些情況下項目沒問題,有些情況下則會認為是資源缺失;

2. Maven外掛程式導致的JVM和OS的資源流失也可能導致這些問題。

生命週期映射

為瞭解決goals失效導致的問題,從M2Eclipse 1.0開始,使用了一個叫項目構造生命週期映射(project build lifecycle mapping)或生命週期映射(lifecyclemapping)的指令配置來定義如何映射pom.xml中的資訊與Eclipse工作空間構造(workspace build)對應的行為。

 

項目構造生命週期映射可以配置在項目的pom.xml檔案中、或者由Eclipse外掛程式提供、或預設使用m2e提供的Maven外掛程式。生命週期映射來源我們稱之為生命週期映射中繼資料源(lifecycle mapping metadata sources)。如果在這些生命週期映射中繼資料源中沒有找到對應的生命週期映射,m2e就會建立一個類似下面的錯誤標記(error marker):

針對外掛程式執行,m2e提供了三種基本的行為: ignore, execute或委託給項目配置程式(configurator)。這三個行為選項對應生命週期映射表中的mapping列。委託給項目配置程式(configurator)

配置程式映射告訴m2e如何把用於匹配外掛程式執行的工作空間項目配置映射工作委託給AbstractProjectConfigurator的實現(使用projectConfigurators擴充點註冊)來完成。大多數情況下,都是m2e的擴充(extension)開發人員使用這種行為。

Ignore

這個選項將告訴m2e忽略這個外掛程式執行。

<pluginManagement>  <plugins>    <plugin>    <groupId>org.eclipse.m2e</groupId>    <artifactId>lifecycle-mapping</artifactId>    <version>1.0.0</version>    <configuration>      <lifecycleMappingMetadata>        <pluginExecutions>          <pluginExecution>            <pluginExecutionFilter>              <groupId>some-group-id</groupId>              <artifactId>some-artifact-id</artifactId>              <versionRange>[1.0.0,)</versionRange>              <goals>                <goal>some-goal</goal>              </goals>            </pluginExecutionFilter>            <action>              <ignore/>            </action>          </pluginExecution>        </pluginExecutions>      </lifecycleMappingMetadata>    </configuration>    </plugin>  </plugins></pluginManagement>

另外,M2e還提供了一個簡單快速的辦法來解決plugin execution not covered問題:

 

使用<pluginManagement/>包圍plugins

 

Execute

 

這個選項告訴m2e這個行為將作為Eclipse工作空間全構造或增量構造的一部分而執行。

<pluginManagement>  <plugins>    <plugin>    <groupId>org.eclipse.m2e</groupId>    <artifactId>lifecycle-mapping</artifactId>    <version>1.0.0</version>    <configuration>      <lifecycleMappingMetadata>        <pluginExecutions>          <pluginExecution>             <pluginExecutionFilter>              <groupId>some-group-id</groupId>              <artifactId>some-artifact-id</artifactId>              <versionRange>[1.0.0,)</versionRange>              <goals>                <goal>some-goal</goal>               </goals>            </pluginExecutionFilter>            <action>              <execute>                <runOnIncremental>false</runOnIncremental>              </execute>            </action>          </pluginExecution>        </pluginExecutions>      </lifecycleMappingMetadata>    </configuration>    </plugin>  </plugins></pluginManagement>

快速解決辦法是建立ignore映射,然後用<execute/>替換<ignore/>,M2e 1.3和高版本預設設定runOnIncremental為false。

 

中繼資料源(metadata sources)尋找順序

1. 項目的 pom.xml

2. 父項目的 pom.xml, 祖父項目的 pom.xml等等.

3. M2Eclipse 1.2+ workspacepreferences

4. Installed M2Eclipse extensions(沒有特定順序)

5. Maven外掛程式提供的M2Eclipse1.1+ lifecycle mapping metadata

6. M2Eclipse內建的預設lifecyclemapping metadata

M2Eclipse使用找到的第一個可用映射。

Maven外掛程式提供的生命週期映射中繼資料

從m2e 1.1開始,maven外掛程式開發人員可以在外掛程式中提供生命週期中繼資料源。

這個進步減少了我們很多需要在pom.xml中針對外掛程式的配置。

M2Eclipse 1.2+ workspace preferences

從M2Eclipse 1.2開始,可以在工作空間偏好選項中配置生命週期映射中繼資料,工作空間層級的外掛程式目標可以使用quick-fix直接忽略掉。然後通過Preferences->Maven->LifecycleMappings可以查看.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.