Eclipse构建器与m2Eclipse和Maven不兼容

时间:2011-09-22 16:59:34

标签: eclipse maven m2eclipse

我看到一个问题,即由Maven构建的给定源文件生成的类文件与Eclipse构建的文件不同。

Eclipse构建器正在优化以下方法:

public SomeClass clone() {
    SomeClass clone = (SomeClass) super.clone();
    return clone;
}

这种方法显然是不必要的,但我没有选择更改源,因为它是生成的。

Eclipse使用哪个构建器来编译这些类?我正在使用m2Eclipse插件,我认为它只是调用Maven来执行构建。为什么Eclipse认为它需要使用不同的构建器执行另一个构建?我是否可以禁用此Eclipse构建器或将其配置为阻止优化?

  • Eclipse版本:3.7
  • m2Eclipse版本:1.0.100.20110804-1717(配置为使用外部Maven)
  • Maven版本:2.2.1

更新

我找到了Eclipse bug report来描述正在发生的事情。为了澄清,它实际上并不是删除任何东西的Eclipse编译器,它只是没有引入标准JDK编译器引入的合成“桥接”方法。错误报告标记为已解决 - 不会修复。

在Maven构建器运行后,我仍然没有找到阻止Eclipse构建器运行的方法。但我们的修复是修改代码生成器以向生成的代码添加显式的serialVersionUID。

2 个答案:

答案 0 :(得分:1)

如果为项目配置,您可以尝试禁用Java Builder。您可以点击Builders - >中的Project标签进行检查。 Properties

来自Eclipse帮助...

  

Java构建器使用自己的编译器构建Java程序(   Eclipse Compiler for Java)实现Java语言   说明书

答案 1 :(得分:1)

我没有Eclipse 3.7,但我希望自3.6以来这些事情没有改变。如果您打开属性 - >在您的项目上,您应该看到Maven Builder是最后的,或者至少在Java Builder之后。这意味着当Maven Builder看到您的Java源文件时,它们已经被编译。顺便说一下,您配置的外部Maven仅在您执行Run as - >时使用。而不是在使用Maven构建时。

所有这一切都是说你所看到的可能是这样的事实:当你从Eclipse中编译时,使用内部Java编译器,而当你从命令行运行Maven时,我希望使用JDK编译器,取决于您安装的内容。我认为你无法改变这种状况。您可以尝试的一件事是通过添加类似

之类的内容在POM中指定要兼容的Java版本来确保它们的行为尽可能接近。
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.3.2</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
  </configuration>
</plugin>

到您的构建部分。

我不得不说我期望Java编译器不允许从类中删除公共方法,即使它们没用。