像VS一样简单的打包“控制台”程序

对于我一个不了解JAVA,没有相关生态圈的C#er, 自己要研究Scala真是困难重重,尤其在项目构建上真是感觉半瓶子醋难以入门。

一个VS控制台程序,build之后甚至不需要了解 ms build就能简单的提取一个debug/release文件夹,放到服务器上跑一下。在做简单的测试程序时这是常用手段。

轮到Scala了,发现JAVA玩的那一套思路完全不同,Classpath到底是怎么回事我不懂,配置文件到底要怎么弄不知道。难道不是放在同一个文件夹下就行么?...试了各种手段,倒是能运行,但操作过程繁琐。

sbt自带的package指令,默认只会把src中源代码打包,dependencies jar全然不顾。当然肯定能配置但我不会。

另外build.sbt里写上 exportJars := true 会导出所有依赖包,实在没办法了倒是可以一个个加进去。

mappings in (Compile, packageBin) += {
  (baseDirectory.value / "example.txt") -> "out/example.txt"
}

以上代码能控制文件输出,以后可能有用

最终选择了一个插件:sbt-pack。 Stackoverflow上提到的还是蛮频繁的,类似的还有sbt-assembly,但前者是把所有jar放到一个lib下,在Windows平台还能生成bat文件方便执行,而后者则是打到一个"Fat Jar"中(又学了个词)...

https://github.com/xerial/sbt-pack

github官方地址

在plugin.sbt中增加 

addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.7.9")

因为我的sbt是 0.13.x

在根目录运行sbt pack 即可以看到结果。但过程中曾经多次提示没有pack指令,难道是我忘了重启cmd?经测试发现必须在build.sbt中加上 

packAutoSettings

不明所以,入门之后再研究吧

遇到一个错误,少打了一个包,发现那个包写成如下形式了:

libraryDependencies += "com.typesafe.akka" % "akka-actor_2.11" % "2.4.2" % "provided"

原来provided代表这个jar会由runtime提供...

入个门太难了

   
 
原文地址:https://www.cnblogs.com/apodemakeles/p/5287253.html