Настройка sbt для использования Java 7 для компиляции?
Я получаю ошибки компиляции при запуске задачи compile
поскольку источники ссылаются на новые classы в пакете java.nio.file
, которые появились только в Java 7.
У меня есть следующее в build.sbt
:
javaHome := Some(file("/opt/jdk/jdk1.7.0")) fork := true
В sbt:
- Динамический миксин в Scala - возможно ли это?
- Равномерность classа в Apache Spark
- objective заявления «вернуть» в Scala?
- Как работает HashPartitioner?
- Итерация над запечатанной чертой в Скала?
> show java-home [info] Some(/opt/jdk/jdk1.7.0)
Он компилируется и отлично работает в Eclipse. Как я могу настроить sbt для использования Java 7 для компиляции?
- Scala underscore - ОШИБКА: отсутствует тип параметра для расширенной функции
- Разница между складками и foldLeft или foldRight?
- Как оптимизировать для-понимания и петель в Scala?
- Для чего нужны classы типов в Scala?
- Как найти размер вспышки RDD / Dataframe?
- проблемы сборки-слияния с использованием sbt-assembly
- Когда в Scala требуется @uncheckedVariance и почему она используется в GenericTraversableTemplate?
- Разница между методом и функцией в Scala
Самый надежный (возможно, единственный) способ сделать это в тот момент, когда он запускает SBT с java
в папке JDK7.
Измените sbt
launcher; или использовать этот, который позволяет вам указать Java Home (и многое другое!) в качестве параметров командной строки.
~/code/scratch/20111009 sbt -java-home /Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home Starting sbt: invoke with -help for other options [info] Loading global plugins from /Users/jason/.sbt/plugins [info] Set current project to default-3e990a (in build file:/Users/jason/code/scratch/20111009/) > console [info] Compiling 1 Scala source to /Users/jason/code/scratch/20111009/target/scala-2.9.1/classes... [info] Starting scala interpreter... [info] Welcome to Scala version 2.9.1.final (OpenJDK 64-Bit Server VM, Java 1.7.0-internal). Type in expressions to have them evaluated. Type :help for more information. scala> java.util.Objects.equals(null, null) res0: Boolean = true
Просто установка javaHome := Some(file("/Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home"))
изменяет версию Java, используемую для компиляции и fork-процессов, но не меняет версию стандарта Java библиотека на пути к classам или версия, используемая для запуска тестов, которые всегда запускают одну и ту же JVM как SBT.
Если вы используете Linux или Mac, другая возможность – посмотреть jenv , диспетчер Java-команд командной строки.
Это позволяет вам выбирать один проект, который должен использовать JDK.
Я использую virtualenv , который является инструментом экосистемы Python. В двух словах, это скрипт оболочки, который позволяет вам легко изменять вашу переменную PATH и возвращаться к тому, что было раньше, если вам нужно.
-
Сначала установите virtualenvwrapper (обертка вокруг virtualenv ):
$ apt-get install virtualenvwrapper
-
Теперь создайте виртуальную среду, например, для Java8 с Scala-2.11.
$ mkvirtualenv j8s11
-
Теперь отрегулируйте ~ / .virtualenvs / j8s11 / bin / postactivate, чтобы определить местоположения для всех ваших инструментов. Ниже приведен пример, который работает для меня:
#! / Bin / Баш JAVA_VERSION = 1.8.0_31 SCALA_VERSION = 2.11.5 SBT_VERSION = 0.13.7 ANT_VERSION = 1.9.4 M2_VERSION = 3.2.5 GRADLE_VERSION = 1,6 PLAY_VERSION = 2.3.7 ACTIVATOR_VERSION = 1.2.12 IDEA_VERSION = IC-135,475 PYCHARM_VERSION = сообщества 3.4.1 TOOLS_HOME = / опт / разработчик export JAVA_HOME = $ {TOOLS_HOME} / jdk $ {JAVA_VERSION} export SCALA_HOME = $ {TOOLS_HOME} / scala - $ {SCALA_VERSION} export SBT_HOME = $ {TOOLS_HOME} / sbt - $ {SBT_VERSION} экспорт ANT_HOME = $ {TOOLS_HOME} / apache-ant - $ {ANT_VERSION} export M2_HOME = $ {TOOLS_HOME} / apache-maven - $ {M2_VERSION} export GRADLE_HOME = $ {TOOLS_HOME} / gradle - $ {GRADLE_VERSION} export PLAY_HOME = $ {TOOLS_HOME} / play - $ {PLAY_VERSION} export ACTIVATOR_HOME = $ {TOOLS_HOME} / активатор - $ {ACTIVATOR_VERSION} export IDEA_HOME = $ {TOOLS_HOME} / idea - $ {IDEA_VERSION} export PYCHARM_HOME = $ {TOOLS_HOME} / pycharm - $ {PYCHARM_VERSION} PATH = $ {PYCHARM_HOME} / бен: $ PATH PATH = $ {IDEA_HOME} / бен: $ PATH PATH = $ {ACTIVATOR_HOME}: $ PATH PATH = $ {PLAY_HOME}: $ PATH PATH = $ {GRADLE_HOME} / бен: $ PATH PATH = $ {M2_HOME} / бен: $ PATH PATH = $ {ANT_HOME} / бен: $ PATH PATH = $ {SBT_HOME} / бен: $ PATH PATH = $ {SCALA_HOME} / бен: $ PATH PATH = $ {JAVA_HOME} / бен: $ PATH экспорт PATH
- Теперь вы можете просто использовать workon для переключения между средами. Пример:
rgomes @ terra: ~ $ workon j8s11 (j8s11) rgomes @ terra: ~ $ java -версия java-версия "1.8.0_31" Java (TM) SE Runtime Environment (assembly 1.8.0_31-b13) Java HotSpot (TM) 64-разрядная серверная VM (assembly 25.31-b07, смешанный режим) (j8s11) rgomes @ terra: ~ $ scala -version Scala code runner version 2.11.5 - Copyright 2002-2013, LAMP / EPFL (j8s11) rgomes @ terra: ~ $ workon j7s10 (j7s10) rgomes @ terra: ~ $ java -версия java-версия "1.7.0_71" Java (TM) SE Runtime Environment (assembly 1.7.0_71-b14) Java HotSpot (TM) 64-разрядная серверная VM (assembly 24.71-b01, смешанный режим) (j7s10) rgomes @ terra: ~ $ scala -version Scala code runner version 2.10.4 - Copyright 2002-2013, LAMP / EPFL
Я предполагаю, что вы хотите поменять все, что вы установили в JAVA_HOME по умолчанию, что вы можете сделать при вызове sbt:
JAVA_HOME= sbt
Это работает для меня на OSX с sbt 0.13.8
изменить javacOption до 1.7? Я не думаю, что настройка javaHome необходима.