предупреждение об устаревании sbt ‹‹= заменено на := приводит к тому, что основной класс не найден

При использовании сбт 0.13.13. Я мог заметить, что при использовании := основной класс не найден (но предупреждение об устаревании не отображается), а для <<= я получаю предупреждение, но основной класс найден. Что здесь не так?

run in Compile := Defaults.runTask(fullClasspath in Compile, mainClass in(Compile, run), runner in(Compile, run))
run in Compile <<= Defaults.runTask(fullClasspath in Compile, mainClass in(Compile, run), runner in(Compile, run))

person Georg Heiler    schedule 02.04.2017    source источник
comment
:= и <<= имеют разные типы. Вам нужно будет изменить тело, но я не уверен, какие именно изменения необходимы.   -  person Alexey Romanov    schedule 03.04.2017


Ответы (1)


run — это InputTask[Unit], а тип runTask — это Def.Initialize[InputTask[Unit]], а правая сторона := должна быть Unit.

То, что вы сделали, компилируется, потому что любое значение может быть отброшено в пользу возвращаемого значения типа Unit, но оно не имеет той же семантики, что и раньше.

Для входных задач нужно «оценить» задачу:

run in Compile := Defaults.runTask(
  fullClasspath in Compile,
  mainClass.in(Compile, run),
  runner.in(Compile, run)).evaluated
person Justin Kaeser    schedule 03.04.2017
comment
любое значение соответствует типу Unit, просто чтобы быть педантичным, это больше, что любое значение может быть отброшено, а значение unit () может быть вставлено. - person Dale Wijnand; 12.05.2017