我看到一个问题,Maven构建的给定源文件生成的类文件与Eclipse生成的类文件不同。
Eclipse构建器正在优化以下方法:
public SomeClass clone() {
SomeClass clone = (SomeClass) super.clone();
return clone;
}这个方法显然是不必要的,但是我不能选择更改源,因为它是生成的。
Eclipse使用哪个构建器来编译这些类?我使用的是m2Eclipse插件,我认为它只是调用Maven来执行构建。为什么Eclipse会认为它需要使用不同的构建器执行另一个构建呢?我可以禁用此Eclipse构建器或配置它以防止优化吗?
更新
我找到了一个描述正在发生的事情的Eclipse错误报告。澄清一下,实际上并不是Eclipse编译器移除任何东西,它只是没有引入标准JDK编译器引入的合成的“bridge”方法。错误报告被标记为“解决-不会修复”。
在Maven构建器运行之后,我仍然没有找到阻止Eclipse构建器运行的方法。但我们的解决方法是修改代码生成器,将显式serialVersionUID添加到生成的代码中。
发布于 2011-09-23 06:20:09
如果为项目配置了Java Builder,则可以尝试禁用该项目。您可以通过单击Project -> Properties中的->选项卡来检查此选项卡。
来自Eclipse的帮助..。
Java构建器使用自己的编译器()构建Java程序,实现Java语言规范。
发布于 2011-09-23 08:14:05
我没有Eclipse3.7,但我预计从3.6开始这些事情没有改变。如果您在项目中打开属性->生成器,您应该会看到Maven Builder是最后一个,或者至少是在Java之后。这意味着当Maven Builder看到您的Java源文件时,它们已经被编译了。顺便说一句,您配置的外部Maven仅在以->形式运行时才使用,而不是在使用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编译器不允许从类中删除公共方法,即使它们是无用的。
https://stackoverflow.com/questions/7518607
复制相似问题