[随笔] maven scala plugin 每次总是编译全部文件
ricardo
2010-03-12
maven scala plugin 每次总是编译全部文件,哪怕只更改了其中的一个文件也是如此。请问大家有什么解决方案没有?
maven version:2.2.1 java version:1.6.0_16 OS: winXP |
|
night_stalker
2010-03-12
不完全是 maven scala plugin 的问题。主要原因是现在的 scalac 有点笨,让它编译什么就编译什么,完全无视时间戳。 2.8.0 正式发布的时候应该会修正这个问题。。。
这个问题其实很复杂 …… 因为有些文件包含的类是相互引用的。 每个 java 文件只允许 1 个 public class / interface,简化了依赖问题,编译器很容易就找到依赖关系并重新编译适当的文件。 但是 scala 允许一个文件里包含多于 1 个的 public class,这个情况就很复杂了 …… 编译器很难得知哪些类受到了影响,只好全世界重来一遍。 另外:maven 启动那 10 秒左右很烦人,用 buildr 会比 maven 快一些 …… 题外:可以用 JavaRebel 等东西使编译自动一点。 |
|
ricardo
2010-03-12
奇怪的是当我用maven 2.0.8却只会重新编译我修改过的文件。 但是mvn scala:run 运行却不正常。如下:
Maven version: 2.0.8 Java version: 1.6.0_17 OS name: "linux" version: "2.6.24-26-server" arch: "i386" Family: "unix" [WARNING] you don't define org.scala-lang:scala-library as a dependency of the project (注:scala-library在pom.xml里,maven 2.2.1 没这个问题) [WARNING] Exception in thread "main" java.lang.NoClassDefFoundError: scala/Application [WARNING] at java.lang.ClassLoader.defineClass1(Native Method) [WARNING] at java.lang.ClassLoader.defineClass(ClassLoader.java:616) [WARNING] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) [WARNING] at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) [WARNING] at java.net.URLClassLoader.access$000(URLClassLoader.java:56) [WARNING] at java.net.URLClassLoader$1.run(URLClassLoader.java:195) [WARNING] at java.security.AccessController.doPrivileged(Native Method) [WARNING] at java.net.URLClassLoader.findClass(URLClassLoader.java:188) [WARNING] at java.lang.ClassLoader.loadClass(ClassLoader.java:303) [WARNING] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) [WARNING] at java.lang.ClassLoader.loadClass(ClassLoader.java:248) [WARNING] at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) [WARNING] at scala_example.FirstClassFunctionsApp.main(FirstClassFunctionsApp.scala) [WARNING] Caused by: java.lang.ClassNotFoundException: scala.Application [WARNING] at java.net.URLClassLoader$1.run(URLClassLoader.java:200) [WARNING] at java.security.AccessController.doPrivileged(Native Method) [WARNING] at java.net.URLClassLoader.findClass(URLClassLoader.java:188) [WARNING] at java.lang.ClassLoader.loadClass(ClassLoader.java:303) [WARNING] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) [WARNING] at java.lang.ClassLoader.loadClass(ClassLoader.java:248) [WARNING] at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) [WARNING] ... 13 more Thanks for your answer |
|
ricardo
2010-04-26
原来这个参数可以解决这个问题 recompileMode (all/modified-only)
|