Maven Update Project 在 Eclipse 中到底做了什么?

What exactly does Maven Update Project do in Eclipse?

首先,我知道this question,但我对那里没有提供的细节很感兴趣。

我查看了 m2eclipse 的文档,发现它不够简洁。我能找到的唯一相关部分是

Alternatively you can run “Maven / Update project configuration” action from the project popup menu, which is configured to run “process-resources” by default and it can be also changed on the same preference page.

但我无法确定Update project configuration是否与Update project相同。我在四处浏览时发现的所有其他来源也没有提供任何详细信息。

回顾一下,我想知道的是:

  1. Update project 运行 是否有任何 Maven 插件,如果有,有哪些以及使用哪些默认设置?
  2. 是否有不是 Maven 插件的结果,而是 Eclipse 内部的效果?
  3. 项目结构有哪些修改?比如Maven依赖是否复制到本地?

Does Update project run any Maven plugin and, if so, which ones and with which default settings?

m2eclipse在更新项目时使用maven-core构建项目对象模型。具体来说,maven model builder用于构建项目模型。换句话说,它会导致依赖项解析、错误和警告通知。有关结果的更多信息,您可以查看org.apache.maven.project.ProjectBuildingResult

我不认为它会产生 运行 个插件。我粗略地看了一下 phase 2 没有启用进行插件处理的更新。

Are there effects which are not a result of a Maven plugin, but are internal to Eclipse?

是的。请参阅答案的结尾部分。

What are the modifications on the project structure? For instance, are Maven dependencies copied locally?

如果您的意思是在本地,那么在 Eclipse 工作区中则没有。 Maven Dependencies 显示对本地存储库的引用,通常是 /.m2/repository。 Repository也是根据Eclipse菜单"Windows->Preference->User Settings"的设置来解析的。

更多信息,您可以从下面开始source code(在eclipse中更新项目时调用的方法之一),

public IStatus runInWorkspace(IProgressMonitor monitor) {
     ...... Unimportant stuff  

    MavenUpdateRequest request = new MavenUpdateRequest(projects, offline,forceUpdateDependencies);
    Map<String, IStatus> updateStatus = configurationManager.updateProjectConfiguration(request, updateConfiguration,
    cleanProjects, refreshFromLocal, monitor);


...... Unimportant stuff  

}

执行的不同任务的摘要(不详尽)

  1. 项目已根据文件系统刷新。这类似于在 eclipse 中对 java 项目调用刷新。
  2. 检查工作区中是否添加了依赖项之一。您一定已经注意到在 maven dependencies 本地项目文件夹下。 Junit 和其他东西将使用此功能选择更改。
  3. 使用 maven 核心库构建 maven 项目模型。
  4. 生命周期映射刷新 - M2Eclipse 尝试将一些插件生命周期映射到 eclipse 操作。如需更多信息,check
  5. 最后,使用 Eclipse 构建机制构建项目

此外,它还会做一些在工作区中存在父 pom 的事情,这在这种情况下不是很重要。

更新项目配置主要与

相关
  1. 添加 Maven 特性(org.eclipse.m2e.core.maven2Nature in .project 文件)- 在您的上下文中并不重要。参见 this
  2. 根据 project.build.sourceEncoding maven 属性.
  3. 为您的项目设置默认字符集
  4. Eclipse - 插件生命周期处理。以上第 3 点。