Eclipse Build Project 和 Maven Compile 命令之间的区别

EclipseBuild Project”命令是否与 Maven 命令 “mvn compile” 相同?两者基本上都做同样的事情吗?

如果,那么为什么在运行“mvn全新安装”后,我需要在STS中执行“构建项目”才能运行应用程序而不会出现任何问题?运行“mvn全新安装”应该已经编译了项目。在 STS 中刷新项目难道不足以运行它吗?

如果不是,那么 Eclipse 的构建是否不同,因为 Java 编译器实现了 Java 语言规范来构建类?但是下面的Apache Maven链接说默认编译器是javax.tools.JavaCompiler(顺便说一句,我使用的是Java 1.6)。


答案 1

简短的答案是否定的,maven build和eclipse build是不一样的。

基本上,eclipse有自己的构建方式,这与maven几乎没有关系。在最基本的层面上,Eclipse只使用自己的Java编译器(Eclipse JDT的一部分)进行Java编译。

很难给出它们如何不同的确切答案,情况非常复杂,这完全取决于您安装了哪些东西(Eclipse插件)。

为了获得尽可能接近的近似值,以便Eclipse所做的与maven在命令行上所做的最相似,您应该安装m2e(maven eclipse工具)。

M2E 试图使 Eclipse IDE 的行为尽可能接近 maven 的命令行行为。它通过配置 eclipse 项目来实现此目的。例如,根据 maven poms 设置源文件夹、类路径等。如果你的pom不做“花哨”的事情(即使用一些不那么常见的maven插件),这很有效。

当你在你的pom中使用maven插件来做“特殊”的事情时,比如可能生成一些代码,或者其他什么,那么m2e有一个插件机制,允许maven插件作者定义一个相应的eclipse插件,该插件“教eclipse”如何做同样的事情。

这可能会变得毛茸茸的,因为并非所有的maven插件都有相应的Eclipse插件,即使它们有,它们也不会自动安装到你的Eclipse实例中。

如果你还没有插件来“教eclipse”关于你的一些pom的插件。M2e将为您提供有关生命周期映射的错误。这表明m2e和maven命令行可能不会为您的项目“做同样的事情”,并且由您以某种方式解决它(例如,通过安装相应的Eclipse“项目配置器”)。


答案 2

我不知道Maven,但Eclipse构建与某些项目的ANT构建不同,所以Maven应该是这种情况。Eclipse 有自己的内部增量构建机制。

Eclipse内部构建(Eclipse的Build Project或Build All或Clean)和Maven/Ant构建基本上做同样的事情,这意味着它们都将编译源代码文件。现在一个明显的区别是,Eclipse内部构建不会为你生成EAR,WAR等文件,而你使用ANT / Maven就是这样做的。

如果 ANT/Maven 使用各自的元素指定类路径,并且通过配置构建路径在 Eclipse 中完成相同的思考,这样当 Eclipse 进行内部构建时,就可以引用这些 JAR 或运行时库。

关于编译器,当你使用Eclipse构建时,它将使用自己的Java版本的Javac编译器Eclipse打包。您可以使用Windows的>首选项>Java>编译器找到Java版本。而在您自己的项目构建的情况下,它将引用您的JAVA_HOME。


推荐