2015-01-14 2 views
10

オブジェクトScalaのが見つかりません - Scalaのコンパイラを実行しているプログラムによって/ wのシンプルなSBTプロジェクトのJava 7(詳細は下記)とコマンドラインで<code>sbt run</code>を呼び出す(なしのIntelliJか何か)/ wの実行

ソース

import scala.tools.nsc.{ Global, Settings } 

object Playground extends App { 
    val compiler = new Global(new Settings()) 
    val testFiles = List("Test.scala") 
    val runner = new compiler.Run() 
    val result = runner.compile(testFiles) 
    println(result) 
} 

エラー

error: error while loading Object, Missing dependency 'object scala in compiler mirror', required by /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home/jre/lib/rt.jar(java/lang/Object.class) 
[error] (run-main-0) scala.reflect.internal.MissingRequirementError: object scala in compiler mirror not found. 
scala.reflect.internal.MissingRequirementError: object scala in compiler mirror not found. 
    at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:17) 
    at scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:18) 
    at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:53) 
    at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:66) 
    at scala.reflect.internal.Mirrors$RootsBase.getPackage(Mirrors.scala:173) 
    at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackage$lzycompute(Definitions.scala:161) 
    at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackage(Definitions.scala:161) 
    at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackageClass$lzycompute(Definitions.scala:162) 
    at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackageClass(Definitions.scala:162) 
    at scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1388) 
    at scala.tools.nsc.Global$Run.<init>(Global.scala:1053) 
    <etc...> 

build.sbt

scalaVersion := "2.11.4" 

val scalaV = "2.11.4" 

libraryDependencies ++= Seq(
    "org.scala-lang" % "scala-compiler"  % scalaV, 
    "org.scala-lang" % "scala-library"  % scalaV, 
    "org.scala-lang" % "scala-reflect"  % scalaV 
) 

javaの

$ java -version 
java version "1.7.0_60-ea" 
Java(TM) SE Runtime Environment (build 1.7.0_60-ea-b15) 
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode) 

答えて

9

これは、あなたが言っているものです。私の分のカップルを取った

trait Probe 

object Playground extends App { 
    //val compiler = new Global(new Settings()) 
    val s = new Settings() 
    s.embeddedDefaults[Probe] 
    val compiler = new Global(s) 
    val testFiles = List("Test.scala") 
    val runner = new compiler.Run() 
    val result = runner.compile(testFiles) 
    println(result) 
} 

。そのメソッド名 "embeddedDefaults"は、sbtから出てくるものと同じように秘密です。

(副作用を示唆する)MutableSettingsにコメント:

/** Initializes these settings for embedded use by type `T`. 
    * The class loader defining `T` should provide resources `app.class.path` 
    * and `boot.class.path`. These resources should contain the application 
    * and boot classpaths in the same form as would be passed on the command line.*/ 

くぼみは、ソースコードのようになります。

+0

ここで何が起こっていますか? s.embeddedDefaults [Probe]を呼び出す副作用はありますか? –

+0

@JonathanNeufeldがコメントを追加しました。 –

3

@ som-snyttソリューションは、クリーンなプロジェクトで私のために働いていました。 akka-httpプロジェクトでは動作しませんでした。これは私が見つけた手動のソリューションです(ハードコードパス。一つは、彼のENVにそれを調整したり、confファイルにそれを置く必要があります)

それだけでコンパイル

val settings = new Settings() 
    //didn't need this one:// settings.embeddedDefaults[Probe] 
    settings.classpath.value = "/home/oz/.ivy2/cache/org.scala-lang/scala-compiler/jars/scala-compiler-2.11.8.jar:/home/oz/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.8.jar:/home/oz/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.11.8.jar:/home/oz/.ivy2/cache/org.scala-lang.modules/scala-xml_2.11/bundles/scala-xml_2.11-1.0.4.jar:/home/oz/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.11/bundles/scala-parser-combinators_2.11-1.0.4.jar" 
    settings.bootclasspath append "/home/oz/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.8.jar:/home/oz/.ivy2/cache/org.scala-lang/scala-compiler/jars/scala-compiler-2.11.8.jar:/home/oz/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.11.8.jar:/home/oz/.ivy2/cache/org.scala-lang.modules/scala-xml_2.11/bundles/scala-xml_2.11-1.0.4.jar:/home/oz/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.11/bundles/scala-parser-combinators_2.11-1.0.4.jar:/home/oz/.ivy2/cache/jline/jline/jars/jline-2.12.1.jar" 
+0

私には疑わしいようですが、私は見ていきます。 –

+0

これは実際には私のために働いただけです。 settings.embeddedDefaultsは役に立ちませんでした。また私はちょうど私のケースでMANIFEST Class-Pathを読んでそれを好きに使った。 'private val classPath = getManifestAttr("クラスパス "、" ")。replace( ''、 ':') プライベートvalの設定=新しい設定 settings.usejavacp.value = true settings.classpath.append(クラスパス) settings.bootclasspath.append(クラスパス) ' – abdolence

3
のためのScalaのLIBSを見つけるためにコンパイラを語っています

私は同じ問題にぶつかりました。

settings.usejavacp.value = true 

私の問題を解決しました!

+0

私はこれをupvoteしなければなりませんでした。最も簡単なオプションがリストされているだけでなく、それは私のために働きましたが、一番上の投票回答はそうではありませんでした。 –

関連する問題