ecb*_*die 15 java eclipse protocol-buffers m2eclipse maven
我正在开发一个Maven Java客户端/服务器项目,该项目依赖于Protocol Buffers(protobuf)在客户端和服务器之间发送RPC.我使用Eclipse for Java EE作为我的主IDE.由于我在项目中使用Maven,因此我使用Eclipse 的m2eclipse插件.我在Eclipse中配置我的项目以使用"Maven Nature".
基本上,通过上面描述的工作空间设置,如果Eclipse配置为自动构建(默认情况下为:项目菜单 - >自动构建),我将遇到INFINITE BUILD LOOPS.每当Eclipse旋转构建时,构建将进入无限循环,通常导致Eclipse消耗所有计算机的CPU资源,并且最终由于内存溢出而在IDE中出现错误弹出窗口.发生的事情是,.proto文件中生成的所有Java代码都是由Maven通过Eclipse构建不断构建的.一旦生成proto文件并将其编译到目录中(在我的例子中target/generated-sources),就会立即重复构建proto文件.即使我点击停止按钮,构建也会再次旋转.我能真正停止无限构建循环的唯一方法是自动禁用Build.
通过查看Web上的链接(请参阅此SOF帖子,也在下面列出),一种解决方法是在Eclipse项目中禁用Maven Project Builder.为此,我必须打开Eclipse项目设置 - >构建器 - >取消选择Maven Project Builder.现在,无限构建循环不会发生,似乎是因为m2eclipse的构建器是罪魁祸首.但是,我现在从此构建器中丢失了许多有用的功能.也就是说,我无法通过m2eclipse利用自动资源处理,例如资源过滤.请注意,使用Maven Nature的项目在Java Build Path中排除了资源目录(src/main/resources和src/test/resources),因为期望Maven Project Builder将它们添加到类路径中.因此,我在禁用Maven Project Builder时遇到的一个问题是我无法在测试中从类路径中读取资源文件.我必须首先运行一个手动maven构建来访问资源(但是一旦我刷新项目,我将无法再找到这些类路径资源).或者,我可以更改我的项目的Java Build Path,但这违背了Maven Nature的默认设置,除了依赖protobuf之外,它在所有Eclipse Java项目中都适用.
有谁知道如何解决这个问题?Eclipse平台似乎太成熟了,不能继续这个问题.我总是可以提交一个会收集灰尘的Eclipse bug,但也许它不是Eclipse的bug,而是我身边的错误配置.非常感谢您的帮助.
在仔细阅读附加的GitHub问题之后,似乎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>
Run Code Online (Sandbox Code Playgroud)
这意味着Eclipse不会遇到无限的构建循环,因为Maven Project Builder不必重新编译同一个protobuf生成的文件夹,它就在/target/generated-sources.同时,未cleanOutputFolder启用不会完全禁用项目拾取原型文件输出并根据这些文件生成新的源; 只要使用干净的目标(例如mvn clean install)运行Maven构建命令,该generated-sources目录仍将被重新生成,因为该target目录已被删除.
| 归档时间: |
|
| 查看次数: |
2492 次 |
| 最近记录: |