【发布时间】:2014-06-17 10:17:47
【问题描述】:
开发环境
我正在开发一个 Maven Java 客户端/服务器项目,该项目依赖于 Protocol Buffers (protobuf) 在客户端和服务器之间发送 RPC。我使用 Eclipse for Java EE 作为我的主要 IDE。因为我在我的项目中使用 Maven,所以我使用 Eclipse 的 m2eclipse 插件。我在 Eclipse 中配置我的项目以使用“Maven Nature”。
问题
基本上,通过上述工作区设置,如果 Eclipse 配置为自动构建(默认设置:项目菜单 --> 自动构建),我会遇到 INFINITE BUILD LOOPS。每当 Eclipse 启动构建时,构建将进入无限循环,通常会导致我的计算机的所有 CPU 资源都被 Eclipse 消耗,最终由于内存溢出,IDE 中会出现错误弹出窗口。正在发生的事情是所有从 .proto 文件生成的 Java 代码都由 Maven 通过 Eclipse 构建持续构建。一旦生成了 proto 文件并将其编译到一个目录中(在我的例子中,target/generated-sources),就会立即重复 proto 文件的构建。即使我要单击停止按钮,构建也会再次启动。我可以真正停止无限构建循环的唯一方法是禁用自动构建。
通过浏览网络上的链接(参见SOF post,也在下面列出),一种解决方法是在我的 Eclipse 项目中禁用 Maven Project Builder。为此,我必须打开 Eclipse 项目设置 --> Builders --> 取消选择 Maven Project Builder。现在,无限构建循环不会发生,似乎是因为 m2eclipse 的构建器是罪魁祸首。但是,我现在失去了这个构建器的许多有用功能。即,我无法利用通过 m2eclipse 进行的自动资源处理,例如资源过滤。请注意,使用 Maven Nature 的项目在 Java 构建路径中排除了资源目录(src/main/resources 和 src/test/resources),因为期望 Maven 项目构建器将它们添加到类路径中。因此,我在禁用 Maven Project Builder 时遇到的一个问题是我无法在测试中从类路径中读取资源文件。我必须首先运行手动 maven 构建来访问资源(但是一旦我刷新项目,我将无法再找到这些类路径资源)。或者,我可以更改项目的 Java 构建路径,但这违背了 Maven Nature 的默认设置,该默认设置适用于所有 Eclipse Java 项目,除了依赖 protobuf 的项目。
所以,说了这么多……
有人知道我可以如何解决这个问题吗? Eclipse 平台似乎太成熟了,不能让这个问题继续存在。我总是可以提交一个会收集灰尘的 Eclipse 错误,但也许它不是 Eclipse 错误,而是我这边的不正确配置。非常感谢您的帮助。
相关链接
- SOF 关于这个问题的帖子:Eclipse loops endlessly: Invoking 'Maven Project Builder'
- 为 maven-protobuf-plugin 打开 Github 问题:https://github.com/igor-petruk/protobuf-maven-plugin/issues/16
【问题讨论】:
-
您链接到的 maven-protobuf-plugin 问题包括一个潜在的解决方法(“将 cleanOutputFolder 设置为 false”);你试过吗?
-
哎呀,我把它误认为是 Eclipse 选项,而不是 protobuf-maven-plugin 配置。它确实解决了问题。
标签: java eclipse maven protocol-buffers m2eclipse