странное сообщение об ошибке: неверная символическая ссылка. Подпись в package.class относится к термину apache в package org, который недоступен.

Когда я попытался скомпилировать простую программу 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. Вопрос в том, что означает это странное/бесполезное сообщение об ошибке.

Спасибо, Томас


person xhudik    schedule 15.01.2013    source источник
comment
В вашем -cp отсутствует около дюжины jar-файлов: все зависимости akka-actor и akka-camel (и их зависимости, и так далее...). Я настоятельно рекомендую использовать инструмент сборки, такой как SBT, чтобы позаботиться об этих вещах.   -  person gourlaysama    schedule 10.09.2013


Ответы (4)


В сообщении говорится: «В моем пути к классам нет пакета org.apache, и он мне нужен при чтении файла package.class». Передайте -Ylog-classpath в scalac и посмотрите, какой настоящий путь к классам попадает в компилятор.

person Iulian Dragos    schedule 15.01.2013
comment
@lulian Dragos, значит, термин package.class относится к моему файлу scala, который на самом деле компилируется? Звучит странно, просто интересно, почему сообщение не может быть четким и коротким, как ваше объяснение (в моем пути к классам нет пакета org.apache). Спасибо лулиан!!!! - person xhudik; 16.01.2013
comment
'package.class' — это элементы, определенные в объектах пакета. компилируются в. Этот файл может быть частью другого jar-файла в пути к классам, не обязательно вашего собственного кода. Я хотел бы, чтобы сообщение было проще, действительно. - person Iulian Dragos; 28.01.2013
comment
С точки зрения Java, это несоответствие версии. Компилятор ожидал определенного объявления типа в объекте пакета, но нашел что-то другое. Добавьте подходящую версию в путь к классам, чтобы решить эту проблему. У меня была такая же проблема, и я исправил ее, добавив соответствующую версию jar. - person Nagaraj Vittal; 14.01.2018

Для меня это был 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

person mancvso    schedule 10.09.2013

На случай, если это поможет кому-то в будущем, у меня возникла эта проблема с приложением, которое я принял после добавления нового класса. Оказалось, что использование заглавных букв в имени пакета в каждом классе внутри пакета и реальная структура каталогов были разными. Как только я перевел весь каталог в нижний регистр, он снова начал работать.

person Sherms    schedule 06.02.2019

Первый пользователь Scala. У меня были некоторые проблемы с настройкой моего затмения, и я получал:

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

person idan koch    schedule 28.08.2014
comment
Мой pom.xml ‹dependency› ‹groupId›org.scala-lang‹/groupId› ‹artifactId›scala-library‹/artifactId› ‹version›2.10.6‹/version› ‹scope›обеспечиваемый‹/scope› ‹/dependency › ‹dependency› ‹groupId›org.apache.spark‹/groupId› ‹artifactId›spark-core_2.10‹/artifactId› ‹version›1.6.2‹/версия› ‹scope›предоставляется‹/scope› ‹/dependency› ‹dependency› ‹groupId›org.apache.spark‹/groupId› ‹artifactId›spark-sql_2.10‹/artifactId› ‹version›1.6.2‹/версия› ‹scope›предоставляется‹/scope› ‹/dependency› - person BdEngineer; 25.09.2018
comment
‹dependency› ‹groupId›org.apache.spark‹/groupId› ‹artifactId›spark-hive_2.10‹/artifactId› ‹version›1.6.2‹/version› ‹scope›предоставляется‹/scope› ‹/dependency› ‹ зависимость› ‹groupId›com.datastax.spark‹/groupId› ‹artifactId›spark-cassandra-connector_2.11‹/artifactId› ‹version›2.3.0‹/version› ‹/dependency› - person BdEngineer; 25.09.2018
comment
Где упоминается эта тестовая версия scala? где я должен проверить версию компилятора? - person BdEngineer; 25.09.2018