web-dev-qa-db-fra.com

Configuration de sbt pour utiliser Java 7 pour la compilation?

Je reçois des erreurs de compilation lors de l'exécution de la tâche compile car les sources font référence à de nouvelles classes dans Java.nio.file package qui n'apparaissait que dans Java 7.

J'ai ce qui suit dans build.sbt:

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

fork := true

En sbt:

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

Il se compile et fonctionne correctement dans Eclipse. Comment puis-je configurer sbt pour utiliser Java 7 pour la compilation?

42
Nick A Miller

La façon la plus fiable (peut-être seulement) de le faire pour le moment est de démarrer SBT avec Java dans le dossier JDK7.

Modifiez votre script de lancement sbt; ou utilisez celui-ci qui vous permet de spécifier Java Home (et bien plus encore!) comme options de ligne de commande.

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

La simple définition de javaHome := Some(file("/Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home")) modifie la Java utilisée pour compiler et bifurquer les processus, mais ne change pas la version de la bibliothèque standard Java Java sur le chemin de classe, ni la version utilisée pour exécuter les tests, qui exécutent toujours la même JVM que SBT.

46
retronym

Si vous utilisez Linux ou Mac, une autre possibilité est de regarder jenv , une ligne de commande Java manager.

Il vous permet de choisir par projet le JDK à utiliser.

4
Gildas Cuisinier

Je suppose que vous souhaitez modifier tout ce que vous avez défini dans Java_HOME par défaut, ce que vous pouvez faire lors de l'appel de sbt:

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

Cela fonctionne pour moi sur OSX avec sbt 0.13.8

3
Cpt. Senkfuss

J'utilise virtualenv , qui est un outil de l'écosystème Python. En résumé, c'est un script Shell qui vous permet de changer facilement votre variable PATH et de revenir à ce qu'elle était avant, si vous en avez besoin.

  1. Installez d'abord virtualenvwrapper (un wrapper autour virtualenv ):

    $ apt-get install virtualenvwrapper

  2. Créez maintenant un environnement virtuel pour, disons, Java8 avec Scala-2.11.

    $ mkvirtualenv j8s11

  3. Maintenant, ajustez ~/.virtualenvs/j8s11/bin/postactivate afin de définir les emplacements de tous vos outils. Vous pouvez voir un exemple ci-dessous qui fonctionne pour moi:

 #!/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} [gradle - $ {GRADLE_VERSION} 
 export PLAY_HOME = $ {TOOLS_HOME}/play - $ {PLAY_VERSION} 
 export ACTIVATOR_HOME = $ {TOOLS_HOME}/activator - $ {ACTIVATOR_VERSION} 
 export IDEA_HOME = $ {TOOLS_HOME}/idée - $ {IDEA_VERSION} 
 export PYCHARM_HOME = $ {TOOLS_HOME}/pycharm - $ {PYCHARM_VERSION} 
 
 CHEMIN = $ {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. Maintenant, vous pouvez simplement utiliser workon pour basculer entre les environnements. Exemple:
 rgomes @ terra: ~ $ workon j8s11 
 
 (j8s11) rgomes @ terra: ~ $ Java -version 
 Java version "1.8.0_31" 
 Environnement d'exécution Java (TM) SE (build 1.8.0_31-b13) 
 Serveur 64 bits Java HotSpot (TM) VM (build 25.31-b07, mode mixte) 
 (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 ) Serveur 64 bits VM (build 24.71-b01, mode mixte) 
 (J7s10) rgomes @ terra: ~ $ scala -version) 
 Coureur de code Scala version 2.10.4 - Copyright 2002-2013, LAMP/EPFL 
3
Richard Gomes