lifecycle mapping: 定义插件生命周期中必须要做的操作。
对于没有lifecycle mapping文件的工程,会报如下错误:
Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-antrun-plugin:1.3:run (execution: generate-sources-input, phase: generate-sources)
可采用如下三种方法修复
1. Delegate to a project Configurator(推荐的方式 )
2. 使用ignore目标
目的:忽略对此插件的检查
方法:修改pom.xml,使用pluginManagement对插件进行管理。注意,对于自定义的插件,还需要在下面进行定义。因为maven 插件运行时,是找<plugins>标签下的<plugin>运行,pluginManagement标签只是提供对插件的管理。
<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>
有一个简单的修复试,就是直接用pluginManagement将问题插件包起来,结构如下:
<pluginManagement>
<plugins>
<plugin></plugin> <!--问题插件 -->
<plugin></plugin>
</plugins>
</pluginManagement>
3. 使用execute目标
目的:强制执行该插件
方法如下:修改pom文件,方法类似于ignore,只不过目标换为execute。注意:对于 execute目标,M2Eclipse不提供安全检查,也就是说用户得自己承担执行该插件的结果。
<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>
action红色部分可以直接写为<execute />。runOnIncremental增加构建,默认false就行。
遇到的问题:
希望能够自定义maven目录,不想把所有的源码放在src/main/java下,而是想自定义目录结构。
解决:maven编译默认是从src/main/java拿 源码,如果希望自定义目录结构,将自定义的目录也打入jar包中,需得在pom中增加 配置,可通过build-helper-maven-plugin插件来解决,如下:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.7</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> </execution> </executions> <configuration> <sources> <!-- 我们可以通过在这里添加多个source节点,来添加任意多个源文件夹 --> <source>src/util</source> <source>src/persist</source> <source>src/base</source> <source>src/brms</source> <!-- <source>test/main</source> --> </sources> </configuration> </plugin> |
对pom进行修改后,遇到问题: plugin not cover........
解决:按照ignore方法进行修改,错误解决
但是,由于自定义了打包插件,但是,通过工程右键-- >maven -->lifecycle mapping看到自定义的打包插件被ignore掉了,如下:
工程希望一定要执行bussinesspackageplugin 这个插件,生成特定目录结构,但是m2e ignore掉了,导致结果不理想。
修改如下:1. 把build-helper-maven-plugin 这个插件的检查ignore掉,
2. execute 自定义插件BusinessPackagePlugin
3. 1.2操作通过pluginManagement标签进行管理
最后修改完的pom如下所示:
<build> <pluginManagement> <plugins> <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <versionRange>[1.7,)</versionRange> <goals> <goal>add-source</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> <pluginExecution> <pluginExecutionFilter> <groupId>com.test</groupId> <artifactId>BusinessPackagePlugin</artifactId> <versionRange>[1.2.1-SNAPSHOT,)</versionRange> <goals> <goal>packagee</goal> </goals> </pluginExecutionFilter> <action> <execute /> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> </plugins> </pluginManagement> <!-- 以下对插件进行定义--> <plugins> <plugin> <groupId>com.test</groupId> <artifactId>BusinessPackagePlugin</artifactId> <version>1.2.1-SNAPSHOT</version> <executions> <execution> <phase>package</phase> <goals> <goal>packagee</goal> </goals> </execution> </executions> <configuration> <action> <execute /> </action> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.0</version> <configuration> <source>1.6</source> <target>1.6</target> <maxmem>256M</maxmem> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.7</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> </execution> </executions> <configuration> <sources> <!-- 我们可以通过在这里添加多个source节点,来添加任意多个源文件夹 --> <source>src/util</source> <source>src/persist</source> <source>src/base</source> <source>src/brms</source> <!-- <source>test/main</source> --> </sources> </configuration> </plugin> </plugins> </build> |
做了如下修改后,打包正常。lifecycle Mapping如下所示:
附:
M2E 加载lifecycle Mapping文件顺序:
1. 工程的pom.xml文件
2. 父项目的pom.xml文件,或者父父项目的pom.xml文件,以上类推
3. window --> preferences --> maven里的配置
4. M2Eclipse 扩展点
5. maven 插件默认的
6. M2Eclipse默认的。
谁先找到用谁。