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插件(如果在配置器中管理不当,可能会导致无休止的项目构建)
请参阅这些链接以获取configuratior(link1,link2)的示例。因此,如果该插件是可以通过外部连接器管理的插件,则可以安装它。m2e维护由其他开发人员提供的此类连接器的列表,这被称为发现目录。如果您没有通过任何选项(1-6)执行的任何生命周期映射元数据,并且发现目录具有一些可以管理执行的扩展,则m2e将提示您安装连接器。
下图显示了m2e如何提示您安装build-helper-maven-plugin的连接器。
。
5)m2e鼓励插件作者在maven插件本身中支持增量构建和提供生命周期映射,这意味着用户将不必使用任何其他生命周期映射或连接器。一些插件作者已经实现了这一点
6)默认情况下,m2e保留大多数常用插件(如maven-compiler-plugin以及许多其他插件)的生命周期映射元数据。
现在回到问题:您可能仅可以针对特定目标在1、2或3中提供忽略生命周期映射,这给您带来麻烦。