Подтвердить что ты не робот

Настройка 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 для компиляции?

4b9b3361

Ответ 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
  1. Теперь вы можете просто использовать 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 необходима.