Настройка sbt для использования Java 7 для компиляции? - PullRequest
41 голосов
/ 09 октября 2011

Я получаю ошибки компиляции при запуске задачи compile, поскольку источники ссылаются на новые классы в пакете java.nio.file, который появился только в Java 7.

У меня есть следующее в build.sbt:

javaHome := Some(file("/opt/jdk/jdk1.7.0"))

fork := true

В сб.:

> show java-home
[info] Some(/opt/jdk/jdk1.7.0)

Он компилируется и отлично работает в Eclipse. Как настроить sbt на использование Java 7 для компиляции?

Ответы [ 5 ]

46 голосов
/ 09 октября 2011

Самый надежный (возможно, единственный) способ сделать это на данный момент - запустить SBT с java в папке JDK7.

Изменить ваш sbt скрипт запуска;или используйте этот , который позволяет вам указать 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, используемую для компиляциии обрабатывает процессы, но не изменяет ни версию стандартной библиотеки Java на пути к классам, ни версию, используемую для запуска тестов, которые всегда запускают ту же JVM, что и SBT.

4 голосов
/ 25 февраля 2013

Если вы используете Linux или Mac, другой возможностью является поиск jenv , диспетчера Java командной строки.

Он позволяет вам выбрать для каждого проекта, какой JDK использовать.

3 голосов
/ 18 мая 2015

Я предполагаю, что вы хотите изменить то, что вы установили в JAVA_HOME по умолчанию, что вы можете сделать при вызове sbt:

JAVA_HOME=<path-to-jdk-home> sbt

Это работает для меня в OSX с sbt 0.13.8

3 голосов
/ 21 февраля 2015

Я использую virtualenv , который является инструментом из экосистемы Python.В двух словах, это сценарий оболочки, который позволяет вам легко изменить переменную PATH и вернуться к тому, что было раньше, если вам нужно.

  1. Первая установка virtualenvwrapper (оболочкавокруг virtualenv ):

    $ apt-get install virtualenvwrapper

  2. Теперь создайте виртуальную среду, скажем, для Java8 с Scala-2.11.

    $ mkvirtualenv j8s11

  3. Теперь настройте ~ / .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 для переключения между средами.Пример:
rgomes@terra:~$ workon j8s11

(j8s11)rgomes@terra:~$ 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)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 -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)rgomes@terra:~$ scala -version
Scala code runner version 2.10.4 -- Copyright 2002-2013, LAMP/EPFL
0 голосов
/ 10 октября 2011

изменить JavacOption до 1,7? Я не думаю, что установка javaHome необходима.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...