Настройка sbt для использования Java 7 для компиляции?
Я получаю ошибки компиляции при запуске задачи compile
, поскольку источники ссылаются на новые классы в пакете java.nio.file
, которые появились только в Java 7.
В build.sbt
у меня есть следующее:
javaHome := Some(file("/opt/jdk/jdk1.7.0"))
fork := true
В sbt:
> show java-home
[info] Some(/opt/jdk/jdk1.7.0)
Он компилируется и работает отлично в Eclipse. Как я могу настроить sbt для использования Java 7 для компиляции?
Ответы
Ответ 1
Самый надежный (возможно, единственный) способ сделать это в тот момент, когда он запускает SBT с java
в папке JDK7.
Измените пусковую установку sbt
script; или используйте этот, который позволяет вам указать 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 в пути к классам, а также версию, используемую для запуска тестов, которые всегда запускаются в одном JVM как SBT.
Ответ 2
Если вы используете Linux или Mac, другая возможность - посмотреть jenv, менеджер Java в командной строке.
Он позволяет вам выбирать один проект, который должен использовать JDK.
Ответ 3
Я использую virtualenv, который является инструментом из экосистемы Python. В двух словах это оболочка script, которая позволяет вам легко изменять вашу переменную PATH и возвращаться к тому, что было до этого, если вам нужно.
-
Сначала установите virtualenvwrapper (обертка вокруг virtualenv):
$apt-get install virtualenvwrapper
-
Теперь создайте виртуальную среду, например Java8 с Scala -2.11.
$mkvirtualenv j8s11
-
Теперь настройте ~/.virtualenvs/j8s11/bin/postactivate, чтобы определить местоположения для всех ваших инструментов. Ниже приведен пример, который работает для меня:
#!/bin/bash
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=community-3.4.1
TOOLS_HOME=/opt/developer
export JAVA_HOME=${TOOLS_HOME}/jdk${JAVA_VERSION}
export SCALA_HOME=${TOOLS_HOME}/scala-${SCALA_VERSION}
export SBT_HOME=${TOOLS_HOME}/sbt-${SBT_VERSION}
export 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-${ACTIVATOR_VERSION}
export IDEA_HOME=${TOOLS_HOME}/idea-${IDEA_VERSION}
export PYCHARM_HOME=${TOOLS_HOME}/pycharm-${PYCHARM_VERSION}
PATH=${PYCHARM_HOME}/bin:$PATH
PATH=${IDEA_HOME}/bin:$PATH
PATH=${ACTIVATOR_HOME}:$PATH
PATH=${PLAY_HOME}:$PATH
PATH=${GRADLE_HOME}/bin:$PATH
PATH=${M2_HOME}/bin:$PATH
PATH=${ANT_HOME}/bin:$PATH
PATH=${SBT_HOME}/bin:$PATH
PATH=${SCALA_HOME}/bin:$PATH
PATH=${JAVA_HOME}/bin:$PATH
export PATH
- Теперь вы можете просто использовать workon для переключения между средами. Пример:
[email protected]:~$ workon j8s11
(j8s11)[email protected]:~$ java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
(j8s11)[email protected]:~$ scala -version
Scala code runner version 2.11.5 -- Copyright 2002-2013, LAMP/EPFL
(j8s11)[email protected]:~$ workon j7s10
(j7s10)[email protected]:~$ java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
(j7s10)[email protected]:~$ scala -version
Scala code runner version 2.10.4 -- Copyright 2002-2013, LAMP/EPFL
Ответ 4
Я предполагаю, что вы хотите поменять все, что вы установили в JAVA_HOME по умолчанию, что вы можете сделать при вызове sbt:
JAVA_HOME=<path-to-jdk-home> sbt
Это работает для меня на OSX с sbt 0.13.8
Ответ 5
изменить javacOption на 1.7? Я не думаю, что настройка javaHome необходима.