2011-10-09 34 views
37

Ricevo errori di compilazione durante l'esecuzione del compito compile come le fonti di riferimento nuove classi in java.nio.file pacchetto che è apparso solo in Java 7.Impostazione di sbt per utilizzare Java 7 per la compilazione?

Ho quanto segue in build.sbt:

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

fork := true 

In SBT:

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

Compila e funziona perfettamente in Eclipse. Come posso impostare sbt per utilizzare Java 7 per la compilazione?

risposta

44

Il modo più affidabile (forse solo) per farlo al momento di avviare SBT con java nella cartella JDK7.

Modificare lo script di avvio sbt; oppure utilizzare this one che consente di specificare Java Home (e molto altro ancora!) come opzioni della riga di comando.

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

semplicemente impostando javaHome := Some(file("/Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home")) cambia la versione Java utilizzato per compilare e processi forcella, ma non cambia la versione della libreria standard di Java nel classpath, né la versione utilizzata per eseguire test, che sono sempre eseguire il la stessa JVM come SBT.

+0

Su 'windows10' e' sbt-0.13' L'ho fatto con 'cmd/C" impostato JAVA_HOME = c: \ apps \ jdk1.7.0_80 && sbt "'. Non aggiungere spazi prima di && poiché influenzeranno la variabile JAVA_HOME. – raisercostin

-2

cambia javacOption a 1.7? Non penso che l'impostazione di javaHome sia necessaria.

4

Se si utilizza Linux o Mac, un'altra possibilità è di cercare jenv, un gestore Java della riga di comando.

Consente di scegliere per progetto quale JDK utilizzare.

+0

Il link dovrebbe essere https://github.com/gcuisinier/jenv – Tvaroh

+0

Immagino che qualcuno abbia riparato il link – nafg

3

Io uso virtualenv, che è uno strumento dall'ecosistema Python. In poche parole, è uno script di shell che ti permette di cambiare facilmente la variabile PATH e tornare a quello che era prima, se necessario.

  1. prima cosa installare virtualenvwrapper (un wrapper virtualenv):

    $ apt-get install virtualenvwrapper

  2. Ora creare un ambiente virtuale per, diciamo, Java8 con Scala-2.11.

    $ mkvirtualenv j8s11

  3. Ora, regolare ~/.virtualenvs/j8s11/bin/PostActivate in modo da definire le posizioni per tutti i vostri strumenti. È possibile vedere un esempio di sotto del quale funziona per me:

 
#!/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. Ora si può semplicemente utilizzare workon per passare da un ambiente all'altro.Esempio:
 
[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

sto supponendo che si desidera modificare ciò che avete impostato in JAVA_HOME per impostazione predefinita, che si può fare quando si richiama SBT:

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

Questo funziona per me su OSX con sbt 0.13.8

Problemi correlati