2011-10-09 27 views
37

estoy recibiendo errores de compilación cuando se ejecuta la tarea compile como referencia las fuentes nuevas clases en java.nio.file paquete que sólo apareció en Java 7.¿Configurando sbt para usar Java 7 para la compilación?

Tengo el siguiente en build.sbt:

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

fork := true 

En SBT:

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

Compila y funciona bien en Eclipse. ¿Cómo puedo configurar sbt para usar Java 7 para compilación?

Respuesta

44

La forma más confiable (quizás única) de hacerlo en el momento en que se inicia SBT con java en la carpeta JDK7.

Modifique su script iniciador sbt; o use this one que le permite especificar Java Home (¡y mucho más!) como opciones de línea de 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 

Basta con establecer javaHome := Some(file("/Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home")) cambia la versión de Java utilizado para compilar y procesos de la horquilla, pero no cambia la versión de la librería estándar de Java en la ruta de clases, ni la versión utilizada para ejecutar las pruebas, que siempre ejecute el del misma JVM que SBT.

+0

En 'windows10' y' sbt-0.13' Lo hice con 'cmd/C" establecido JAVA_HOME = c: \ apps \ jdk1.7.0_80 && sbt "'. No agregue espacios antes de &&, ya que afectarán a la variable JAVA_HOME. – raisercostin

-2

cambiar javacOption a 1.7? No creo que configurar JavaHome sea necesario.

4

Si usa Linux o Mac, otra posibilidad es mirar jenv, un administrador de Java de línea de comando.

Le permite elegir por proyecto qué JDK usar.

+0

El enlace debería ser https://github.com/gcuisinier/jenv – Tvaroh

+0

Supongo que alguien corrigió el enlace – nafg

3

Yo uso virtualenv, que es una herramienta del ecosistema de Python. En pocas palabras, es un script de shell que le permite cambiar fácilmente su variable PATH y volver a lo que era antes, si es necesario.

  1. Primero instale virtualenvwrapper (una envoltura alrededor de virtualenv):

    $ apt-get install virtualenvwrapper

  2. Ahora crear un entorno virtual para, por ejemplo, con Java8 Scala-2.11.

    $ mkvirtualenv j8s11

  3. Ahora, ajuste ~/.virtualenvs/j8s11/bin/postactivate de manera que se define ubicaciones para todas sus herramientas. Se puede ver un ejemplo por debajo del cual funciona para mí:

 
#!/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. Ahora puedes usar workon para cambiar entre entornos.Ejemplo:
 
[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

Estoy asumiendo que usted quiere cambiar lo que ha establecido en JAVA_HOME de forma predeterminada, lo que se puede hacer cuando se invoca SBT:

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

Esto funciona para mí en OSX con sbt 0.13.8

Cuestiones relacionadas