Java 推荐的代码重用

Java 推荐的代码重用,java,scala,project,svn-externals,Java,Scala,Project,Svn Externals,我正在Scala中启动一个新项目,它严重依赖于另一个Java项目中的源文件。起初我想在那个项目中创建一个新的包/模块,但这看起来很混乱。但是,我不想在我的新项目中重复Java代码。我提出的最佳解决方案是通过svn外部依赖性引用Java项目。另一个解决方案是从原始文件创建一个jar文件,我将把它作为库附加到新的Scala项目中。然而,这使得保持最新更不方便。哪条路线比较好 SVN外部: 易于更新 容易犯 不方便的设置 Jar文件作为库: 易于设置 旧代码不在活动开发中(稳定,仅修复错误) 多

我正在Scala中启动一个新项目,它严重依赖于另一个Java项目中的源文件。起初我想在那个项目中创建一个新的包/模块,但这看起来很混乱。但是,我不想在我的新项目中重复Java代码。我提出的最佳解决方案是通过svn外部依赖性引用Java项目。另一个解决方案是从原始文件创建一个jar文件,我将把它作为库附加到新的Scala项目中。然而,这使得保持最新更不方便。哪条路线比较好

SVN外部:

  • 易于更新
  • 容易犯
  • 不方便的设置
Jar文件作为库:

  • 易于设置
  • 旧代码不在活动开发中(稳定,仅修复错误)
  • 多步骤更新
  • 需要打开旧项目以进行更改

您有Scala项目,它取决于Java项目的各个部分。对我来说,这听起来像Java项目应该是一个库,有一个版本号,这个版本号只是由Scala项目引用的。或者,跨两个项目共享的部分应该分离到一个库中。使用像Maven这样的构建工具可以清楚地知道使用的是哪个版本。Java项目可以单独发展,或者如果为了Scala项目需要更改,您可以推出一个新版本,并在其他环境中继续使用旧版本(如果您担心破坏)

我所能想到的唯一一个超越二进制依赖关系的例外是,Java代码本身实际上是在编译时以某种特定于Scala项目的方式进行处理的。比如说,注释处理


使用SVN外部可能是一个解决方案。只要确保使用分支和快照,以确保对主干上的Java代码进行某些更新不会突然导致Scala项目无法运行。

您有Scala项目,这取决于Java项目的某些部分。对我来说,这听起来像Java项目应该是一个库,有一个版本号,这个版本号只是由Scala项目引用的。或者,跨两个项目共享的部分应该分离到一个库中。使用像Maven这样的构建工具可以清楚地知道使用的是哪个版本。Java项目可以单独发展,或者如果为了Scala项目需要更改,您可以推出一个新版本,并在其他环境中继续使用旧版本(如果您担心破坏)

我所能想到的唯一一个超越二进制依赖关系的例外是,Java代码本身实际上是在编译时以某种特定于Scala项目的方式进行处理的。比如说,注释处理


使用SVN外部可能是一个解决方案。只需确保使用分支和快照,以确保对主干上的Java代码进行某些更新不会突然导致Scala项目无法运行。

您是否混合了Scala/Java是无关紧要的。 如果两个项目非常不同并且具有不同的发布周期,那么您可能希望使用外部依赖项(JAR)。 否则,您可以使用sbt并使两个项目成为同一构建的子项目(您的sbt构建文件将使scala项目依赖于java项目)。甚至,如果它们真的如此相互交织,只需要一个包含java和scala源文件的项目。Sbt处理得很好


Maven也是一个选项。

是否混合了scala/java是无关紧要的。 如果两个项目非常不同并且具有不同的发布周期,那么您可能希望使用外部依赖项(JAR)。 否则,您可以使用sbt并使两个项目成为同一构建的子项目(您的sbt构建文件将使scala项目依赖于java项目)。甚至,如果它们真的如此相互交织,只需要一个包含java和scala源文件的项目。Sbt处理得很好


Maven也是一个选项。

使用Maven,您可以非常轻松地设置scala/Java混合项目。看看scala maven插件


Eclipse用户可能不太满意maven的集成。使用maven,您可以非常轻松地设置scala/Java混合项目。看看scala maven插件


Eclipse用户可能不太满意maven集成的糟糕状况。

我会将项目分开,并可能考虑将其升级为使用maven构建,然后您可以使用maven管理项目之间的依赖关系,并在存储库中维护工件。从本质上讲,依赖于源代码意味着什么?Scala编译器可以读取
.class
文件来派生Java类定义。无论如何,源代码复制是一个非常糟糕的主意。如果您使用IDEA(可能还有Eclipse),您可以让它从外部库链接到源代码,而无需将源代码合并到使用IDEA的项目中。@RandallSchulz:我使用Intellij,我也考虑过这一点,但我的一些同事使用Eclipse/Netbeans,所以我不想使用特定于IDE的解决方案,我同意使用maven的建议。只需将构建系统切换到maven(或SBT、Leiningen等兼容系统),并从Scala项目中引用Java项目。顺便说一句,使用maven自动意味着您将拥有IDE不可知的解决方案。大多数现代IDE都支持maven。在sbt中,您可以通过git/svn/hg链接引用和依赖外部项目。不确定,如果需要在SBT下管理两个项目。我会将项目分开,并可能考虑将其升级为使用maven构建,然后您可以使用maven管理项目之间的依赖关系,并在存储库中维护工件。从本质上讲,依赖于源代码意味着什么?Scala编译器可以读取
.class
文件来派生Java类定义。在任何电动汽车中