将Scala集成到Java中的现有项目中
我们有一个用Java编写的项目。这是一个maven项目,包含jsp页面和大量java代码:将Scala集成到Java中的现有项目中,java,scala,maven,servlets,scala-collections,Java,Scala,Maven,Servlets,Scala Collections,我们有一个用Java编写的项目。这是一个maven项目,包含jsp页面和大量java代码: 用于处理用户请求和响应的servlet servlet用来处理所需逻辑的逻辑类 用于连接到数据库并执行逻辑所需的特定查询的SQL生成器类 嗯,我们正在寻找斯卡拉。例如,我们使用映射器从数据库中获取一个实体集合,然后转换这个集合,过滤它并返回servlet。在Java中,这似乎是一件好事。问题是-如何将其集成到现有项目中?我可以在用Java编写的逻辑文件中使用一些Scala类,这些类再次使用用Java编
- 用于处理用户请求和响应的servlet
- servlet用来处理所需逻辑的逻辑类
- 用于连接到数据库并执行逻辑所需的特定查询的SQL生成器类
嗯,我们正在寻找斯卡拉。例如,我们使用映射器从数据库中获取一个实体集合,然后转换这个集合,过滤它并返回servlet。在Java中,这似乎是一件好事。问题是-如何将其集成到现有项目中?我可以在用Java编写的逻辑文件中使用一些Scala类,这些类再次使用用Java编写的映射器文件吗 是的,Java和Scala之间可以毫无问题地相互依赖 我现在正在从事一个Java/Scala混合项目(以前是一个纯Java项目)。请记住,就JVM而言,从javac生成的.class文件与从scalac生成的.class文件没有区别 例如:我在Scala中实现Java接口并扩展Java类,没有任何问题。我还将Java bean和“Scala”spring bean一起实例化在同一个定义文件中(Scala bean依赖于Java bean,反之亦然),并且Java和Scala bean在spring集成消息传递管道中共存 这两种语言的互操作性相当好,不过就集合而言,您可能想看看Scala和对象
对于构建,我们使用Ant(我个人更喜欢新项目使用SBT,但如果您处理的是使用Ant的现有java项目,那么更改构建系统可能会带来更多麻烦)。要将ant配置为编译scala文件,请看一下。这是一种将scala代码集成到Maven构建中的好方法,尽管我还没有尝试过。(我使用SBT,它可以很好地实现Scala/Java集成,还可以通过插件创建IDE项目(Idea和Eclipse)。不过,你不想改变整个构建过程)。我发现没有人提到@richard close的回答中提到的,以前是maven Scala插件。我在这方面没有丰富的经验,但我已经在两个Java项目(一个相当大,一个很小)上取得了立竿见影的成功,所以我觉得在这里发布这篇文章是值得的——尽管这个问题现在有点过时了——因为我是通过谷歌提出这个问题的 该页面应该能够让您继续,尽管还有其他有趣的文档页面。只需添加此处显示的相关部分,并尝试编译您的项目。不要犯我犯的错误,首先尝试使用其他地方记录的其他配置:只需在顶级pom.xml中遵循这些最小的配置更改(或者如果Scala在项目中的作用域有限,则遵循任何有意义的更改)。选择更易于复制和粘贴的文本(没有显示添加内容的“+”)
+
+org.scala-lang
+scala图书馆
+ 2.11.7
+
+
+net.alchim31.maven
+scala maven插件
+ 3.2.1
+
+
+org.apache.maven.plugins
+maven编译器插件
+ 2.0.2
+
+
+net.alchim31.maven
+scala maven插件
+
+
+scala先编译
+过程资源
+
+添加源
+编撰
+
+
+
+scala测试编译
+过程测试资源
+
+测试编译
+
+
+
+
+
+org.apache.maven.plugins
+maven编译器插件
+
+
+编撰
+
+编撰
+
+
+
+
如果您使用的是Java 8(即Scala 2.11.x),请确保使用上述Scala的更新版本;一些官方文件可能有点过时
有一件事我注意到,文档说您需要做,但显然不需要做:您不需要将Scala源代码放在单独的目录中,并且可以将它们放在项目的现有java目录下。这是方便的,似乎工作,但我不知道是否有副作用
IntelliJ注释
如果您碰巧正在使用IntelliJ,请不要忘记在项目视图中右键单击maven模块并“添加框架支持…”以将Scala框架添加到项目中。如果您使用的是多模块项目,而不仅仅是顶级模块,那么您可能需要将框架添加到打算在其中使用Scala的每个子模块中。然后,您应该能够将Java文件自动转换为Scala文件,可以通过重构菜单访问(尽管您需要一些手动修复)。这可以为您提供一种快速测试配置的方法,特别是如果您可以先尝试一些小Java类的话
警告
@jamesadam关于javaconversion的评论也非常重要。
在一个项目中尝试将Scala与另一种JVM语言(Kotlin)集成时,我意识到的一个问题是,由于每种语言处理集合的方式,事情可能没有那么顺利:它们都设计为与Java很好地协同工作,但不一定彼此协同工作。我不知道细节,但这与问题有点不相干。你能再具体一点吗?也许可以举个例子?Java如何从Scala中导入类?与从Java中导入类完全相同。如果您遇到一些问题,请检查IDE中的编译顺序设置,确保它没有单独编译Java和Scala文件。“尽管涉及到类型”,您是否
<dependencies>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ <version>2.11.7</version>
+ </dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
+ <plugin>
+ <groupId>net.alchim31.maven</groupId>
+ <artifactId>scala-maven-plugin</artifactId>
+ <version>3.2.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
</plugins>
</pluginManagement>
<plugins>
+ <plugin>
+ <groupId>net.alchim31.maven</groupId>
+ <artifactId>scala-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>scala-compile-first</id>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>add-source</goal>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>scala-test-compile</id>
+ <phase>process-test-resources</phase>
+ <goals>
+ <goal>testCompile</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>compile</phase>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>