是否建议为Maven项目分离Scala和Java源文件?

是否建议为Maven项目分离Scala和Java源文件?,java,scala,maven,Java,Scala,Maven,我一直在从事一个完全由Java组成的Maven项目,最近开始将Scala代码混入其中 Scala提供的强大表现力、Scala maven插件的易用性,尤其是Java和Scala之间令人难以置信的互操作性,让我感到惊讶 然而,我遇到了一个不便;根据Maven的约定,Java的源代码进入src/main/Java,而Scala的源代码进入src/main/Scala。我发现它相当麻烦,因为我必须频繁地来回查看Java和Scala源文件,每次我都必须遍历包目录的深层层次结构(我经常关闭选项卡以避免编辑

我一直在从事一个完全由Java组成的Maven项目,最近开始将Scala代码混入其中

Scala提供的强大表现力、Scala maven插件的易用性,尤其是Java和Scala之间令人难以置信的互操作性,让我感到惊讶

然而,我遇到了一个不便;根据Maven的约定,Java的源代码进入
src/main/Java
,而Scala的源代码进入
src/main/Scala
。我发现它相当麻烦,因为我必须频繁地来回查看Java和Scala源文件,每次我都必须遍历包目录的深层层次结构(我经常关闭选项卡以避免编辑器混乱)

所以问题是:是否建议维护单独的目录
src/main/java
src/main/scala
?若然,原因为何

为了增加更多的背景知识,我一直在研究web应用程序框架Wicket,它的惯例是将HTML文件与其对应的Java文件放在一起。如果我们将目录分开,那么HTML文件自然也会分开(我认为将Scala文件和相应的HTML文件放在不同的目录中没有意义)。然后是“为什么我找不到Foo.html?哦,我找错目录了。”

通过检查源文件的扩展名,人类和机器都很容易区分源文件本身。我将pom.xml配置为在
src/main/Java
中同时处理Java和Scala,它工作正常(编译并运行)。另一方面,分离目录会带来在Java和Scala中定义冲突类的风险,这是一个粗心的错误

嗯,如果一个目录不仅包含java,而且还包含Scala,我不想给它命名
java
。但这是我唯一能想到的分离目录的方法。
(编辑:我提出了一个变通解释;让我们想想,
java
代表java虚拟机。这样,如果我们决定使用JNI,使用
src/main/c
并不矛盾,因为c不在JVM上运行。)

哦,还有一点;我的项目不是一个开源项目;与努力遵循惯例相比,开发便利性更受欢迎


这个问题的灵感来自于。

我会说是的,尽可能重复使用代码。也许将来您可以在其他地方使用这个Java部件

您可能知道,您可以在Scala项目中使用Java,但不能在Java项目中使用Scala。因此,在这个特定的示例中,它将帮助您进行(未来?)Java项目。如果您想重用一段Java代码,您可以在Java项目和Scala项目中都这样做

所以i.m.h.o.它不会停在src/main/。。。但是你真的应该把它们放在不同的组件中



顺便说一句,小旁注:如果我是正确的,Wicket允许你把html放在其他地方,即使是在不同的项目中。。。我曾经(只有一次)看到它很方便,我们必须为我们的不同客户创建不同的前端。java代码保持不变,wicket id也保持不变,但html到处都在变化。虽然使用Qwicky插件也会给我们带来一些问题,因为它在我们的IDE中再也找不到html文件。

我使用IDE,文件的布局也不重要。我可以使用ctrl+单击任何类来打开它。也许是时候从使用编辑器切换到使用Java/Scala工具设计了。IDE也为你做了很多很多。你不会相信你在使用IDE之前浪费了多少时间。我知道IDE。我使用Eclipse已经5年多了,并切换到了基于终端的环境(vim)。我使用的是eclim,所以技术上我仍然使用Eclipse,但未能将其配置为与Java/Scala混合项目一起工作。恐怕我不想回到那种以鼠标为导向的环境。我已经厌倦了配置“另一个操作系统”只是为了使用文件管理器/跳线/导入管理器等。。。要是不是E而是T就好了;我喜欢在编写代码时用自己的手来研究引擎盖下发生的事情。我在许多不同的机器上使用IntelliJ,我不需要重新配置任何东西(也许我只是很乐意接受默认设置)你可以在每一个函数中使用热键,我不觉得我经常使用鼠标。你是说源代码兼容性吗?那么,理解代码是程序员的责任
java
可以使用适当的类路径设置运行scala程序,因此二进制兼容性(或运行能力)应该不是问题。啊,是的,你是对的。然后在某种程度上,我还是会在不同的文件夹中进行拆分,甚至是项目,我想只是为了不被混淆……在某种程度上,我觉得将来修改会更容易,但我还找不到真正好的理由……如果Java代码和Scala代码相互依赖(在我的例子中),将它们分离到单独的目录中是没有意义的。此外,如果我们想再次重新分离混合目录,我们可以为此编写一个脚本。我已经有了不同的UI项目和可重用的核心逻辑。就可重用性而言,Scala更像是一个框架,而不是一种语言。对我来说,用语言分开仍然没有意义。