Мне не нравится много публикаций, написанных другими, но я думаю, что этот вопрос заслуживает более полного ответа, чем то, что было строго задано.
Итак, во-первых, fsc
перекомпилирует все по умолчанию, период.Это ant
, а не fsc
, что исключает Hello.scala
, поскольку имя файла соответствует имени класса.Он не пропускает Tokens.scala
, потому что не существует скомпилированного класса с именем Tokens
, поэтому при отсутствии Tokens.class
он перекомпилируется Tokens.scala
.
Это неправильносо Скалой.Scala отличается в одном фундаментальном аспекте от Java тем, что из-за технических ограничений на JVM изменение в trait
требует перекомпиляции каждого класса, объекта или экземпляра, в котором он используется.
Теперь можно исправитьant
задача сделать что-то умнее, начиная с Scala 2.8.Я беру эту информацию из blogtrader.net от Caoyuan, плагина Scala для славы Netbeans.Вы определяете задачу Scala для цели сборки, как показано ниже:
<scalac srcdir="${src.dir}"
destdir="${build.classes.dir}"
classpathref="build.classpath"
force="yes"
addparams="-make:transitive -dependencyfile ${build.dir}/.scala_dependencies"
>
<src path="${basedir}/src1"/>
<!--include name="compile/**/*.scala"/-->
<!--exclude name="forget/**/*.scala"/-->
</scalac>
Она говорит ant
перекомпилировать все, так как ant
просто недостаточно умен, чтобы выяснить, что нужно перекомпилировать или нет,Он также сообщает Scala , что нужно создать файл, содержащий зависимости компиляции, и использовать алгоритм транзитивной зависимости, чтобы выяснить, что нужно перекомпилировать или нет.
Вам также нужно изменить цель init навключите каталог сборки в путь к классу сборки, так как Scala потребуется для перекомпиляции других классов.Это должно выглядеть так:
<path id="build.classpath">
<pathelement location="${scala-library.jar}"/>
<pathelement location="${scala-compiler.jar}"/>
<pathelement location="${build.classes.dir}"/>
</path>
Для получения более подробной информации, пожалуйста, обратитесь к блогу Цаоюаня.