SPI*_*984 24 java servlets scala maven scala-collections
我们有一个用Java编写的项目.这是一个maven项目,它有jsp页面和很多java代码:
好吧,我们正在寻找Scala.例如,我们使用映射器从数据库中获取实体集合,然后转换此集合,过滤它并返回到servlet.这在Java中似乎是件好事.问题是 - 我如何将其整合到现有项目中?我可以在我用Java编写的逻辑文件中使用一些Scala类,这些类再次使用用Java编写的映射器文件吗?
Jam*_*dam 21
我现在正在处理一个混合的Java/Scala项目(以前只是一个Java项目).请记住,就javac生成的.class文件与scalac生成的.class文件之间的JVM而言,没有任何区别.
例如:我实现Java接口并在Scala中扩展Java类没有任何问题.我还在同一个定义文件中将Java bean和'Scala'spring bean一起实例化(scala bean依赖于java bean,反之亦然),并且我在Spring集成消息传递管道中共存Java和Scala bean.
这两种语言互操作性很好,但在涉及集合的情况下,您可能希望查看Scala的JavaConversions和JavaConverters对象.
对于构建,我们使用Ant(我个人更喜欢SBT用于新项目,但如果您正在处理使用ant的预先存在的Java项目,那么更改构建系统可能会更麻烦).要配置ant以编译scala文件,请查看此问题.
我看到没有人提到David Bernard的scala-maven-plugin,以前是maven-scala-plugin,在@ richard-close的回答中提到过.我没有丰富的经验,但我已经立即成功完成了两个Java项目(一个相当大,一个小),所以我认为值得在这里发布 - 尽管这个问题现在有些过时 - 因为我通过谷歌来到这个问题.
该混合的Java/Scala的项目页面应该可以让你去,但也有其他有趣的文档页面为好.只需添加此处显示的相关部分,然后尝试编译您的项目.不要犯下我做的错误并尝试使用其他配置首先记录在其他配置中:只需在顶级pom.xml中执行这些最小配置更改(或者如果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>
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Java 8(即Scala 2.11.x),请务必使用上面的Scala更新版本; 一些官方文档可能会稍微调整一下.
有一件事我注意到文档说你需要做但显然不需要做:你不需要将Scala源放在一个单独的目录中,并且可以将它们留在项目的现有java目录下.这很方便,似乎有效,但我不知道是否有副作用.
如果您碰巧使用IntelliJ,请不要忘记右键单击项目视图中的maven模块和"添加框架支持..."以将Scala框架添加到项目中.如果您使用的是多模块项目,而不仅仅是顶层模块,则可能需要将框架添加到要使用Scala的每个子模块中.然后,您应该能够将Java文件自动转换为Scala文件,可通过Refactor菜单访问(尽管您需要一些手动修复).这可以为您提供一种快速测试配置的方法,特别是如果您可以先尝试一些小Java类.
@james-adam关于JavaConversions的评论也非常重要.在一个项目中尝试将Scala与另一种JVM语言(Kotlin)集成时,我已经意识到的一个问题是,由于每种语言处理集合的方式,事情可能不会那么顺利:它们都设计为与Java兼容,但是不一定是彼此.我不知道细节,但无论如何这与问题有点相关.
| 归档时间: |
|
| 查看次数: |
14551 次 |
| 最近记录: |