Eclipse中的设置是否传播到Maven?

时间:2014-12-09 20:58:56

标签: java eclipse maven gwt m2eclipse

我已经将一个Maven项目导入Eclipse,但我仍然不确定Maven和Eclipse是如何一起工作的。

例如,当我将源文件夹从一个模块复制并粘贴到另一个模块以尝试解决Can Google App Engine Modules share source code just like Maven Modules?时,Eclipse刚刚更改了我的.classpath文件:

当我复制/粘贴我需要在模块/项目中复制的源代码时,Eclipse将此添加到.classpath:

<classpathentry kind="src" path="/nbsocialmetrics-backend"/>

Eclipse虽然没有对我的POM.xml文件进行任何更改。 Eclipse似乎对它为我做的.classpath更改感到满意,我没有任何相关项目/模块的编译警告。但是我项目顶层的mvn clean install抱怨很多遗漏的依赖项。

我是否正确假设命令行Maven命令(例如mvn clean install)不会查看Eclipse .classpath文件?

Maven不仅仅依赖以下内容吗?

  1. POM.xml文件
  2. Maven Central资源库等存储库
  3. 传递给mvn
  4. 的命令行参数
  5. 源代码/资源/等。 (你要构建的东西,而不是.classpath等元数据)
  6. 如果我理解这一点,为什么Eclipse允许我对我导入的Maven项目做出不正确的更改?实际上可以安全地进行哪些类型的Eclipse更改 - 换句话说,在我在命令行执行mvn clean install时,我实际上会在Eclipse中进行哪些类型的更改?

    作为另一个例子,我试图在我的一个模块中使用Eclipse的WindowBuilder编辑器来创建一些GWT(J2EE / Maven感觉&#39;模块&#39;不是GWT意义上的&## 39;模块&#39)。由于我希望确保我有正确版本的WindowsBuilder来解析Error "No GWT module found" for Maven project imported into Eclipse,我应该查看Eclipse插件设置还是Maven POM.xml设置?在这种情况下,Eclipse,对吗?

    感谢您帮助我理解。

2 个答案:

答案 0 :(得分:1)

你必须选择一种或另一种策略,Eclipse在大多数情况下不会写入你的POM文件,你应该只依赖你的POM文件,因为你的项目几乎是IDE Free,如果你选择了Maven来管理构建和依赖,使用它。

你是对的,mvn clean install不会关心你的类路径文件。

我暂时没有使用Eclipse(我推荐你使用IntelliJ IDEA),但我认为解决问题的一种方法是在POM文件中添加依赖项,然后将这些更改添加到类路径中,而不是相反

答案 1 :(得分:1)

  

我是否正确假设命令行Maven命令(例如mvn clean install)不会查看Eclipse .classpath文件?

是的,Maven不使用此文件。此文件仅供Eclipse用于保存有关项目的信息,即源目录及其对应的类或输出目录以及类路径条目。

Maven依赖于您提到的资源:POM文件,存储库等

  

为什么Eclipse允许我对我导入的Maven项目进行不正确的更改?

即使项目是Maven项目,Eclipse仍允许用户以不符合标准Maven约定的方式更改项目的构建设置。例如,模块中的默认源位于src/main/java下,但没有什么可以阻止您右键单击模块,并在构建路径设置中添加不符合此标准的源文件夹(不用说这个这不是一件好事。)

Eclipse中的Maven项目只是一个配置为使用Maven插件的项目,它使用Maven实现依赖管理(例如,它也可以同时是一个Groovy项目)。

  

我在Eclipse中在命令行执行mvn clean install时实际上会反映出哪些类型的更改?

就Maven而言,所有信息都存在于POM中。因此,只有对POM进行的更改(添加依赖项或插件)才会影响从命令行使用Maven的行为。

  

我希望确保我有正确版本的WindowsBuilder来解决错误&#34;找不到GWT模块&#34;对于导入Eclipse的Maven项目,我应该查看Eclipse插件设置还是Maven POM.xml设置?在这种情况下,Eclipse,对吗?

是的,它应该是Eclipse而不是Maven。 Maven插件与WindowBuilder功能无关。项目可以是Maven项目,同时也可以配置为GWT项目。