Scala项目为"子项目" eclipse中的Java项目

时间:2014-04-10 19:51:48

标签: java eclipse scala

我正在写一个Scala"插件"到Java项目。 (基本上我是在编写一个Scala类,它是Java类的子类。它打算在Java应用程序中运行。)我可以在Scala / eclipse IDE中创建Java项目和Scala项目,以及我可以告诉其中一个人参考另一个。但是,当我试图告诉每个人引用另一个时,我收到一条错误消息,说我在构建路径中有一个循环。当我将Java项目的引用遗漏给Scala项目(但包括Scala项目的引用到Java项目)时,我能够编写子类并引用所需的Java类。但是现在Java应用程序无法看到Scala子类。有没有一种很好的方法来完成这样的事情?

感谢。

2 个答案:

答案 0 :(得分:2)

通常不可能在项目之间创建循环引用。这很自然。假设您有相互依赖的项目'A'和'B'。这意味着为了编译'B',您应该已经编译了'A'。但要编译'A',你需要编译'B'。你怎么打破这样的循环?

也就是说,在某些特定的情况下,可能。例如,如果这些项目中的 classes 之间没有依赖循环,即没有像com.a.X -> com.b.Y -> com.b.Z -> com.a.X那样的依赖循环,那么就可以在两个项目中编译两个项目,直到它们都是完全编译。但这需要复杂的算法和依赖性跟踪系统,这是不值得的。

基于插件的系统通常按以下方式构建。主项目分为两部分:实际程序及其插件API(实际程序依赖于此API)。然后有插件依赖于API而不是主程序。主程序现在可以依赖插件,因为现在没有循环。

+------------------------+
|                        |
+-> Plugin 1 --+      Project
|              |         |
+-> Plugin 2 --+--+      V
|              |  +-->  API
+-> Plugin 3 --+

更好的是在运行时将程序与插件链接起来。然后,插件上没有Project的编译时依赖性。运行时系统(例如OSGi或JBoss模块或自定义的东西)负责在运行时查找和加载插件。这种方法需要对构建系统和启动项目的方式进行一些更改,但这可能是值得的。当然,这取决于您的实际要求。

答案 1 :(得分:1)

This StackOverflow问题似乎解决了我的问题。它的解决方案是添加Scala Nature"到Java项目:右键单击项目,然后选择配置>添加Scala自然。完成后,可以在Java项目中包含Scala文件!那就是它。