由protobuf生成的代码引起的Eclipse构建循环(与Maven Project Builder相关)
问题内容:
开发环境
我正在一个Maven Java客户端/服务器项目上,该项目依赖于协议缓冲区(protobuf)在客户端和服务器之间发送RPC。我使用Eclipse for Java EE作为主要IDE。由于我在项目中使用了Maven,因此我在使用Eclipse的m2eclipse插件。我在Eclipse中配置我的项目以使用“ Maven Nature”。
问题
基本上,使用上述工作区设置,如果将Eclipse配置为自动构建(默认设置为:项目菜单->自动构建),我将遇到INFINITE BUILD LOOPS。每当Eclipse剥离构建时,构建都会进入无限循环,这通常会导致Eclipse消耗我所有计算机的CPU资源,并且由于内存溢出最终会在IDE中出现错误弹出窗口。事实是,.protoMaven通过Eclipse构建不断地从文件中生成所有Java代码。原始文件生成并编译到目录后(以我为例,target/generated-sources),原始文件的构建会立即重复进行。即使我单击“停止”按钮,构建也会再次旋转。我真正停止无限构建循环的唯一方法是自动禁用Build。
通过浏览Web上的链接(请参阅此SOF帖子,也在下面列出),一种解决方法是在我的Eclipse项目中禁用Maven Project Builder。为此,我必须打开Eclipse项目设置-> Builders->取消选择Maven Project Builder。现在,无限构建循环将不会发生,这似乎是因为m2eclipse的构建器才是罪魁祸首。但是,我现在从此构建器中丢失了许多有用的功能。即,我无法利用通过m2eclipse进行的自动资源处理,例如资源过滤。请注意,使用Maven Nature的项目具有资源目录(src/main/resources和src/test/resources)排除在Java构建路径上,因为期望Maven Project Builder将它们添加到类路径中。因此,禁用Maven Project Builder时遇到的一个问题是,我无法在测试中从类路径读取资源文件。我必须先运行一个手动的Maven构建来访问资源(但是一旦刷新项目,我将无法再找到这些类路径资源)。或者,我可以更改项目的Java Build Path,但这违反了Maven Nature的默认设置,该默认设置适用于除依赖protobuf的所有Java项目中的所有Eclipse Java项目。
所以,所有人都在说…
有谁知道我如何解决这个问题?Eclipse平台似乎太成熟了,无法继续解决此问题。我总是可以提交一个会收集灰尘的Eclipse错误,但是也许这不是Eclipse错误,而是我这边的错误配置。提前非常感谢您的帮助。
相关链接
问题答案:
在更仔细地阅读了附件的GitHub Issue之后,看来cleanOutputFolder
在protobuf-maven-plugin
中设置配置可以解决问题。这是使用插件的XML示例(版本无关):
<plugin>
<groupId>com.github.igor-petruk.protobuf</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.6.3</version>
<configuration>
<cleanOutputFolder>false</cleanOutputFolder>
</configuration>
</plugin>
这意味着Eclipse将不会遇到无限的构建循环,因为Maven Project Builder不必继续重新编译protobuf
生成的相同文件夹,该文件夹位于中/target/generated-sources
。同时,未cleanOutputFolder
启用并不能完全禁止项目获取原始文件输出并基于这些文件生成新源。只要以清除目标(例如mvn clean install
)运行Maven构建命令,generated-sources
由于该target目录已被删除,因此仍将重新生成目录。