构建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中的文档。