【问题标题】:Is it recommended to separate Scala and Java source files for a Maven project?是否建议为 Maven 项目分离 Scala 和 Java 源文件?
【发布时间】:2017-02-27 15:09:40
【问题描述】:

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

我对 Scala 提供的出色表现力、scala-maven-plugin 的易用性以及 Java 和 Scala 之间令人难以置信的互操作性感到惊讶。

但是,我遇到了一个不便;根据 Maven 的约定,Java 的源代码进入 src/main/java,而 Scala 的源代码进入 src/main/scala。我发现这很麻烦,因为我必须经常来回切换 Java 和 Scala 源文件,并且每次我必须遍历包目录的深层层次结构(我经常关闭选项卡以防止我的编辑器混乱)。

所以问题是:是否建议维护单独的目录src/main/javasrc/main/scala?如果有,为什么?

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

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

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

哦,还有一点;我的项目不打算作为开源项目;开发便利比努力遵循惯例更受欢迎。

这个问题的灵感来自this answer

【问题讨论】:

  • 我使用 IDE,文件的布局方式并不重要。我可以使用 ctrl+click 任何类来打开它。也许是时候从使用编辑器切换到使用 Java/Scala 的工具设计了。 IDE 还可以为您做很多事情。您不会相信在使用 IDE 之前浪费了多少时间。
  • 我知道 IDE。我使用 Eclipse 超过 5 年,并切换到基于终端的环境 (vim)。我正在使用 eclim,所以从技术上讲,我仍在使用 Eclipse,但未能将其配置为与 Java/Scala 混合项目一起使用。恐怕我不想回到那个面向鼠标的环境。而且我受够了配置“另一个操作系统”只是为了使用文件管理器/跳线/导入组织器等……如果它不是 E 而是 T 就好了;我喜欢在编写代码时亲手使用工具来研究幕后发生的事情。
  • 我在很多不同的机器上使用 IntelliJ,但我发现我不需要重新配置任何东西(也许我很乐意接受默认设置)你可以为每个功能使用热键,但我没有'不觉得我用鼠标那么多。

标签: java scala maven


【解决方案1】:

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

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

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


顺便说一句,小注:如果我是正确的,Wicket 也允许您将 html 放在其他地方,即使在不同的项目中...我看到它(仅)一次方便,我们必须创建不同的我们的不同客户的前端。 Java 代码保持不变,wicket-id 也保持不变,但 html 到处都发生了变化。尽管使用 Qwicky 插件也给我们带来了一些问题,因为它在我们的 IDE 中找不到 html 文件了。

【讨论】:

  • 您的意思是源兼容性吗?然后,理解代码是程序员的责任。 java 可以使用适当的类路径设置运行 scala 程序,因此二进制兼容性(或运行能力)应该不是问题。
  • 啊,是的,你是对的。然后我仍然会以某种方式拆分不同的文件夹,甚至项目只是为了不混淆我猜......
  • 在某些方面感觉将来修改会更容易,但我还找不到真正好的理由..
  • 如果 Java 代码和 Scala 代码相互依赖(在我的情况下),将它们分开到单独的目录中没有意义。另外,如果我们想再次重新分离混合目录,我们可以为此编写一个脚本。我已经有不同的 UI 项目和可重用性的核心逻辑。在可重用性方面,Scala 更像是一个框架而不是一门语言。 按语言对我来说仍然没有意义。
猜你喜欢
  • 2016-10-14
  • 2012-08-31
  • 2014-12-04
  • 2017-05-05
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多