2013-08-04 5 views
5

私は、ScalaとSlickを使用して、ビルドとパッケージングツールとしてMavenを使用して、小さなデータベースクエリユーティリティを構築しています。maven-scalaプラグインを使用する依存関係の「エラー:不正なシンボリックリファレンス」を解決するにはどうすればよいですか?

私のコードでは、構文エラーなしでコンパイルが、ビルドはこれで失敗します。マッパークラスは私のコードではありません

[INFO] --- maven-scala-plugin:2.15.0:compile (default) @ origdups --- 
[INFO] Checking for multiple versions of scala 
[INFO] includes = [**/*.scala,**/*.java,] 
[INFO] excludes = [] 
[INFO] /home/lreeder/dev/scala/origdups/src/main/scala:-1: info: compiling 
[INFO] Compiling 4 source files to /home/lreeder/dev/scala/origdups/target/classes at 1375638972068 
[INFO] No known dependencies. Compiling everything 
[ERROR] error: bad symbolic reference. A signature in Mapper.class refers to term runtime 
[INFO] in package scala.reflect which is not available. 
[INFO] It may be completely missing from the current classpath, or the version on 
[INFO] the classpath might be incompatible with the version used when compiling Mapper.class. 
(several more similar errors) 

注こと。私はそれがスリックの一部だと思う?私はなっMavenのデバッグでコンパイルした

<dependency> 
    <groupId>com.typesafe.slick</groupId> 
    <artifactId>slick_2.10</artifactId> 
    <version>1.0.1</version> 
</dependency> 

<dependency> 
    <groupId>org.scala-lang</groupId> 
    <artifactId>scala-library</artifactId> 
    <version>2.10.1</version> 
</dependency> 

とスリック2.10(現在のScala 2.10.1をビルド):私は、Mavenの-ScalaのプラグインのためのScala 2.10.1を使用していますこれは上記のエラーを生成するJava呼び出しです。

/usr/local/jdk1.7.0_21/jre/bin/java -classpath /home/lreeder/.m2/repository/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-lang/scala-compiler/2.10.1/scala-compiler-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-lang/scala-reflect/2.10.1/scala-reflect-2.10.1.jar:/home/lreeder/.m2/repository/org/scala-tools/maven-scala-plugin/2.15.0/maven-scala-plugin-2.15.0.jar -Xbootclasspath/a:/home/lreeder/.m2/repository/org/scala-lang/scala-library/2.10.1/scala-library-2.10.1.jar org_scala_tools_maven_executions.MainWithArgsInFile scala.tools.nsc.Main /tmp/scala-maven-6314934214401019063.args

私はここで何が欠けていますか?これらのエラーを取り除くには、maven-scalaプラグインの設定で何を設定する必要があります。

答えて

6

このエラー:

error: bad symbolic reference. A signature in Mapper.class refers to term runtime in package scala.reflect which is not available.

はscala.reflect.runtimeはクラスパスから欠落していると言っています。実際、/tmp/scala-maven-6314934214401019063.argsをチェックすると、そこにリストされているクラスパスにはありませんでした。

Slick 2.10はScalaリフレクションパッケージに依存しています。 https://github.com/slick/slick/blob/master/src/main/scala/scala/slick/direct/MetadataProvider.scalaを参照してください。したがって、SlickのPOMは、他のプロジェクトが過渡的な依存関係としてそれを解決できるように、スカラリフレクションをリストする必要があります。しかし、slick_2.10-1.0.1.pomはscala-reflectをリストしていません。

自分自身のプロジェクトPOMに依存関係としてスカラリフレクションを追加することでこれが修正されました。

+0

私は同じですが、マルチモジュールプロジェクトの中にあります。欠落しているクラスは、私のモジュールの1つに属するクラスです(実際にそこにあります)。 – Edmondo1984

+0

不足しているクラスに依存するモジュールには、Maven POMに依存関係があるモジュールが含まれていることを確認してください。これが設定されている場合は、mavenをデバッグモード(-Xオプション)で実行し、maven-scala-pluginコマンドの ".args"ファイルを確認してください(私の質問でjavaコマンドの最後を参照してください)。そのargsファイルには、クラスパスに依存するJARが含まれている必要があります。そうでない場合は、そこに到達する方法を見つける必要があります。私は自分のPOMに依存関係を追加することでそうすることができました。 – lreeder

+1

実際に私は問題を発見しました。同じ名前(異なる階層)のスカラーパッケージオブジェクトが2つある場合、これはコンパイルされません。 – Edmondo1984

関連する問題