web-dev-qa-db-ja.com

奇妙なエラーメッセージ:シンボル参照が正しくありません。 package.classの署名は、利用できないパッケージorgのApacheという用語を指します。

単純なtypesafe'akkaプログラム(scala 2.10、akka、2.1.0)をコンパイルしようとしたとき:

 scalac -cp "akka-actor_2.10-2.1.0.jar:akka-camel_2.10-2.1.0.jar" write2.scala

error: bad symbolic reference. A signature in package.class refers to term Apache
in package org which is not available.
It may be completely missing from the current classpath, or the version on
the classpath might be incompatible with the version used when compiling package.class.
error: bad symbolic reference. A signature in package.class refers to term camel
in value org.Apache which is not available.
It may be completely missing from the current classpath, or the version on
the classpath might be incompatible with the version used when compiling package.class.
write2.scala:21: error: bad symbolic reference. A signature in package.class refers to term model
in value org.camel which is not available.
It may be completely missing from the current classpath, or the version on
the classpath might be incompatible with the version used when compiling package.class.
val mina = system.actorOf(Props[MyEndPoint])

three errors found

21行目のコード:

 val mina = system.actorOf(Props[MyEndPoint])

(同じプログラムがEclipseで正しくコンパイルされたので、ソースコードは問題ありません)

ほとんどの場合、-cp変数に一部のjarファイルがありません。質問はその奇妙な/役に立たないエラーメッセージはどういう意味ですか。

ありがとう、トーマス

16
xhudik

メッセージには「パッケージがありませんorg.Apacheクラスパスにあり、ファイルを読み取るときに必要ですpackage.class"。 パス -Ylog-classpathからscalacに移動し、コンパイラに到達するrealクラスパスを確認します。

11
Iulian Dragos

私にとっては、JDKがPATHにもJava_HOMEにも設定されていませんでした

Java_HOMEを追加してJDKルートフォルダーをポイントし、jdk/binフォルダー(javacを含む)をパスに直接追加できます。

パスを追加する方法については、Oracleのドキュメントを参照してください http://docs.Oracle.com/javase/7/docs/webnotes/install/windows/jdk-installation-windows.html ==

2
mancvso

これが将来誰かに役立つ場合に備えて、新しいクラスを追加した後に採用したアプリケーションでこの問題が発生していました。パッケージ内の各クラスのパッケージ名の大文字と実際のディレクトリ構造が異なることが判明しました。すべてのディレクトリを小文字にすると、再び機能し始めました。

1
Sherms

初めてScalaユーザー。Eclipseの構成で問題が発生し、以前は次の情報を取得していました。

Error:scalac: bad symbolic reference. A signature in package.class refers to type compileTimeOnly
in package scala.annotation which is not available.
It may be completely missing from the current classpath, or the version on
the classpath might be incompatible with the version used when compiling package.class.

最後に、scalaテストバージョン2.11とコンパイラバージョンが一致する必要があることがわかりました。ダウンロードscalaバージョン2.11-RC1

0
idan koch