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