且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Scalac命令使用注意一则

更新时间:2022-09-02 08:34:35

  郁闷的半天,发现一个很诡异的问题,测试版本是scala2.8。这个问题在javac下应该是一样的解决方法

 
在eclipse默认工程目录下,为了偷懒,把所有的jar包用*.jar表示,执行编译命令
        scalac -cp lib/*.jar -d bin src/test/*.scala 
结果报
error: IO error while decoding lib/scala-library.jar with UTF-8
Please try specifying another one using the -encoding option
java.io.IOException: MALFORMED[1]
at scala.tools.nsc.io.SourceReader$.decode(SourceReader.scala:137)
at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:91)
at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:46)
at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:65)
at scala.tools.nsc.Global.getSourceFile(Global.scala:228)
at scala.tools.nsc.Global.getSourceFile(Global.scala:234)
at scala.tools.nsc.Global$Run$$anonfun$6.apply(Global.scala:811)
at scala.tools.nsc.Global$Run$$anonfun$6.apply(Global.scala:811)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:206)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:206)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
at scala.collection.immutable.List.foreach(List.scala:45)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:206)
at scala.collection.immutable.List.map(List.scala:45)
at scala.tools.nsc.Global$Run.compile(Global.scala:811)
at scala.tools.nsc.Main$.process(Main.scala:108)
at scala.tools.nsc.Main$.main(Main.scala:122)
at scala.tools.nsc.Main.main(Main.scala)
这个报错是因为把class当成普通文件了,如果用scala test.class,也会报这个错
 
但是执行
       scalac -cp bin/ -d bin src/testimport/*.scala 
却是正确的。说明cp参数这么写应该没有错,上面的那个错在哪里了呢。
 
结果凑巧要写一个既包含jar包的,又要有bin里面的classes,写成
       scalac -cp bin/:lib/*.jar -d bin src/testimport/*.scala 
结果这下对了
 
然后尝试了一下,如果是要使用*的话,前面必须带上":"
用IDE习惯了,手动编译这些细节问题都没遇到过,狂汗...
 
补充:
比较好的喜欢是在-cp参数后面以.:作为开头,
比如你要执行的class就在当前目录下,这样就已经把目录带上了,否则提示找不到该class会比较费解


本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/425472,如需转载请自行联系原作者