1

构建Scala的工程常用sbt,sbt固然灵活,功能强大,却也难以精通,且在国内使用往往遇到网络不畅通的情况。虽然可以使用Repox公服和Coursier加速,却也浪费程序员们宝贵的时间。

Maven虽然死板,在各大公司中应用却较为广泛,而且极有可能公司的发布系统只支持Maven。另外Maven也有Scala的插件,Scala生态系统中的杀手级应用Spark实际上也从sbt切换到了Maven。使用Maven解析各种依赖也比sbt要快一些,所以掌握使用Maven构建Scala工程非常有必要。

本文主要介绍Scala的Maven插件以及一些小技巧。

自定义模板

使用mvn archetype:generate然后选择net.alchim31.maven:scala-archetype-simple这个模板就可以快速创建一个简易的Scala工程。但是,这个模板有点过时了,所以我的建议是fork这个模板工程 ,然后自己定制自己的模板。可以参考我修改的模板:https://github.com/sadhen/sca...

git clone https://github.com/sadhen/scala-archetype-simple.git
cd scala-archetype-simple
mvn install
cd yourProjectDir
mvn archetype:generate -DarchetypeCatalog=local

按照以上步骤可以在本地使用自己定制过的模板。

启动和打包

我给模板添加了maven-assembly-plugin。于是:

$ mvn package
$ java -jar target/test-1.0-SNAPSHOT-jar-with-dependencies.jar 1 2 3
Hello World!
concat arguments = 123

也可以:

$ mvn scala:run -DmainClass=com.sadhen.App -DaddArgs="1|2|3"
Hello World!
concat arguments = 123

其中1,2,3是参数,|是分隔符。
还有一种方法是在配置文件中使用launcher,详见参考资料2的文档。

REPL

sbt console相对应的是mvn scala:console。这个REPL便利之处在于,可以import工程中依赖的jar包代码和自己写的代码随意玩耍。实际上,REPL也是一种测试/调试代码的方式。另外,还可以在REPL执行前和执行后调用一些自己编写的代码,详见参考资料2中的文档。

参考资料

  1. Scala with Maven

  2. Scala Maven Plugin

  3. executable-jar-with-maven-example


溢出的达达
521 声望8 粉丝

《Scala实用指南》译者,GNU TeXmacs维护者。