'jvm-1.8' не является допустимым выбором для '-target'

IntelliJ жалуется на следующее исключение, когда я пытаюсь сделать свой проект.

Error:scalac: 'jvm-1.8' is not a valid choice for '-target'
Error:scalac: bad option: '-target:jvm-1.8'

Но "градирня чистая установка" работает отлично.

Настройка проекта:

gradle версия 2.3

scala 2.10 и java

3 из 4 модулей используют java 1.7 (совместимость источника и цели), 4-й модуль имеет исходную и целевую совместимость 1.8 и вызывает проблему.

Любые идеи, как я могу избежать ошибки? (переход на java 7 не вариант, обновление scala есть)

Ответ 1

Gradle по умолчанию используйте задачу ant для создания кода Scala, а https://issues.scala-lang.org/browse/SI-8966 показывает, что jvm 1.8 не был добавляется в качестве поддерживаемой цели до Scala 2.11.5.

Вы можете попробовать использовать компилятор на основе цинка, добавив следующий файл сборки gradle.

    tasks.withType(ScalaCompile) {
      scalaCompileOptions.useAnt = false
    }

Вам также может потребоваться добавить цинковый компилятор в список зависимостей.

Ответ 2

В Intellij IDEA (15 CE) добавьте этот параметр компилятора scalac:

Сборка, выполнение, развертывание → Компилятор → Scala Компилятор → По умолчанию

Дополнительные параметры компилятора: -target:jvm-1.7 (был пуст).

Были также профили Gradle 1,... с -target:jvm-1.8, поэтому я также изменил их на -target:jvm-1.7.

Я использую Scala 2.10, JVM 1.8, совместимость с исходным кодом 1.7. Это помогло мне в моем случае.

Ответ 3

Я получил то же сообщение об ошибке, используя IntelliJ 2017.2.5 с JRE 1.8.0, scala 2.10.5 и gradle 3.3. Я решил свою проблему, установив флажок "Делегировать IDE для сборки/запуска действий для захвата" в IntelliJ IDE, расположенной по адресу

Настройки> Сборка, выполнение, развертывание> Инструменты сборки> Gradle> Runner

Подробности можно найти здесь: https://docs.gradle.org/4.2.1/userguide/scala_plugin.html#ideaTargetVersion и https://www.jetbrains.com/help/idea/gradle.html.

Следует отметить, что я смог построить свой gradle-проект вне IntelliJ (т.е. строки cmd) и получил эту ошибку только при попытке выполнить сборку с использованием IntelliJ IDE.

Ответ 4

Я искал решение для этого целую вечность, наконец нашел его - делиться для всех, кто читает это.

Взято из: https://devnet.jetbrains.com/message/5523902

subprojects {
    tasks.withType(ScalaCompile) {
        sourceCompatibility = "1.7"
        targetCompatibility = "1.7"
    }
}

Ответ 5

Если вы используете JDK 1.8 в качестве SDK IntelliJ Project, то по умолчанию уровень языка проекта и совместимость с исходным кодом могут быть установлены на версию 8 по умолчанию. Это также будет отражено в настройках компилятора IntelliJ Scala.

Чтобы переопределить уровень языка Java 8 по умолчанию, мне было необходимо добавить следующее к моему build.gradle:

sourceCompatibility = 1.7

После этого сделайте IntelliJ IDEA снова импортируйте проект Gradle. Затем вы должны подтвердить, что изменение было воспринято IntelliJ, выполнив следующие действия: Настройки → Сборка, Исполнение, Развертывание → Компилятор → Scala Компилятор

Посмотрите поле дополнительных параметров компилятора для каждого из перечисленных модулей и убедитесь, что оно содержит -target:jvm-1.7, а не -target:jvm-1.8.

В разделе "Настройки проекта" → "Модули" вы должны увидеть, что теперь на уровне языка установлено значение 7.

N.B. Установка свойства sourceCompatibility в свойствах Gradle allprojects, subprojects или использовании tasks.withType(ScalaCompile) не работала для меня; его нужно было указать отдельно, чтобы его подхватили.

(Это работало для меня с использованием IntelliJ IDEA 2017.2.3, Gradle 4.1, плагина Gradle Scala и Scala версии 2.10)

Ответ 7

С этим ./ide_configs/intellij/update_config.sh при запуске тестов сразу после использования ./ide_configs/intellij/update_config.sh для обновления настроек вкладки. Я смог решить проблему, снова настроив тестер Gradle.