2011-10-09 12 views
37

Dostaję skompilować błędy podczas uruchamiania zadania compile jako źródła odniesienia nowych klas w java.nio.file pakietu, który pojawił się tylko w Javie 7.Konfigurowanie sbt do używania Java 7 do kompilacji?

Mam następujący w build.sbt:

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

fork := true 

W SBT:

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

Kompiluje i działa poprawnie w środowisku Eclipse. Jak mogę skonfigurować sbt, aby używać Java 7 do kompilacji?

Odpowiedz

44

Najbardziej niezawodny (być może jedyny) sposób, aby to zrobić w momencie uruchomienia SBT z java w folderze JDK7.

Zmodyfikuj swój skrypt wyrzutni sbt; lub użyj this one, która pozwala określić Java Home (i wiele więcej!) jako opcje wiersza poleceń.

~/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 

Wystarczy ustawienie javaHome := Some(file("/Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home")) zmienia wersję Java używaną do kompilowania i procesy widelec, ale nie zmienia wersji standardowej biblioteki Java na ścieżce klasy, ani wersja służy do uruchamiania testów, które są zawsze uruchamiane The ta sama JVM co SBT.

+0

Na 'windows10' i' sbt-0.13' zrobiłem to z zestawem 'cmd/C 'JAVA_HOME = c: \ apps \ jdk1.7.0_80 && sbt" '. Nie dodawaj spacji przed &&, ponieważ będą one wpływać na zmienną JAVA_HOME. – raisercostin

-2

zmienić javacOption na 1,7? Nie sądzę, aby ustawienie javaHome było konieczne.

4

Jeśli używasz systemu Linux lub Mac, inną możliwością jest przejrzenie jenv, menedżera Java linii poleceń.

Pozwala wybrać jeden projekt, którego JDK ma użyć.

+0

Link powinien być https://github.com/gcuisinier/jenv – Tvaroh

+0

Chyba ktoś naprawił link – nafg

3

Używam virtualenv, który jest narzędziem z ekosystemu Python. W skrócie, jest to skrypt powłoki, który pozwala łatwo zmienić zmienną PATH i wrócić do tego, co było wcześniej, jeśli zajdzie taka potrzeba.

  1. Najpierw zainstaluj virtualenvwrapper (otoki wokół virtualenv):

    $ apt-get install virtualenvwrapper

  2. Teraz stworzenie wirtualnego środowiska dla, powiedzmy, Java8 z Scala-2.11.

    $ mkvirtualenv j8s11

  3. Teraz dostosować ~/.virtualenvs/j8s11/bin/postactivate, tak aby określić lokalizacje dla wszystkich narzędzi. Można zobaczyć przykład, poniżej której pracuje dla mnie:

 
#!/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. Teraz możesz po prostu użyć workon aby przełączyć między środowiskami.Przykład:
 
[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 
2

Jestem zakładając chcesz zmienić cokolwiek zostało ustawione w JAVA_HOME domyślnie, co można zrobić podczas wywoływania SBT:

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

Działa to dla mnie na OSX z sbt 0.13.8

Powiązane problemy