web-dev-qa-db-ja.com

Java 7をコンパイルに使用するようにsbtを設定しますか?

ソースがJava.nio.fileパッケージの新しいクラスを参照しているため、compileタスクを実行するとコンパイルエラーが発生します。これは、Java 7。

build.sbtには次のものがあります。

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

fork := true

Sbtでは:

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

コンパイルしてEclipseで正常に実行します。コンパイルにJava 7を使用するようにsbtを設定するにはどうすればよいですか?

42
Nick A Miller

JDK7フォルダー内のJavaを使用してSBTを開始する瞬間にこれを行う最も信頼できる(おそらく唯一の)方法。

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の標準ライブラリのバージョンは変更されませんクラスパス、またはテストの実行に使用されるバージョン。これらは常にSBTと同じJVMを実行します。

46
retronym

LinuxまたはMacを使用している場合、別の可能性として、コマンドラインJava managerである jenv を参照することです。

JDKを使用するプロジェクトごとに選択できます。

4

私はあなたがデフォルトでJava_HOMEに設定したものを変更したいと仮定しています、それはsbtを呼び出すときに行うことができます:

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

これは、sbt 0.13.8がインストールされたOSXで動作します

3
Cpt. Senkfuss

私はvirtualenvを使用します。これは、Pythonエコシステムからのツールです。簡単に言えば、シェルスクリプトです。必要に応じて、PATH変数を簡単に変更し、以前の状態に戻すことができます。

  1. 最初にvirtualenvwrapperをインストールします(virtualenvのラッパー):

    $ apt-get install virtualenvwrapper

  2. 次に、たとえばScala-2.11でJava8の仮想環境を作成します。

    $ 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} 
エクスポートSCALA_HOME = $ {TOOLS_HOME}/scala-$ {SCALA_VERSION} 
エクスポートSBT_HOME = $ {TOOLS_HOME}/sbt-$ {SBT_VERSION} 
エクスポート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} 
エクスポート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 
エクスポートパス
  1. これで、workonを使用して環境を切り替えることができます。例:
 rgomes @ terra:〜$ workon j8s11 
 
(j8s11)rgomes @ terra:〜$ Java -version 
 Javaバージョン "1.8.0_31" 
 Java(TM)SEランタイム環境(ビルド1.8.0_31-b13)
 Java HotSpot(TM)64ビットサーバーVM= (ビルド25.31-b07、混合モード)
(j8s11)rgomes @ terra:〜$ scala -version 
 Scalaコードランナーバージョン2.11.5-著作権2002-2013、LAMP/EPFL 
 
(j8s11)rgomes @ terra:〜$ workon j7s10 
 
(j7s10)rgomes @ terra:〜$ Java -version 
 Javaバージョン "1.7.0_71" 
 Java(TM)SEランタイム環境(ビルド1.7.0_71-b14)
 Java HotSpot(TM )64ビットサーバーVM(ビルド24.71-b01、混合モード)
(j7s10)rgomes @ terra:〜$ scala -version 
 Scalaコードランナーバージョン2.10.4-Copyright 2002-2013、LAMP/EPFL 
3
Richard Gomes