Classpath компилируется правильно, но не запускается. Чего мне не хватает - PullRequest
0 голосов
/ 20 февраля 2010

Привет,

Я играю с mahout , я написал базовый класс Java, который импортирует некоторые библиотеки. Кажется, мой путь к классам верен при компиляции, я не получаю ошибок или жалоб вообще.

Однако, когда я запускаю скомпилированный класс, я получаю исключение, говорящее ...

Exception in thread "main" java.lang.NoClassDefFoundError: Test
Caused by: java.lang.ClassNotFoundException: Test

Ответы [ 4 ]

6 голосов
/ 20 февраля 2010

Я думаю, что . не на вашем пути к классам. Например, вы можете компилировать с:

javac -cp foo.jar:bar.jar Test.java

но затем запустите код, который вам нужен

java -cp foo.jar:bar.jar:. Test

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

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

2 голосов
/ 20 февраля 2010

Теперь я получаю сообщение об ошибке java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

Вы пропускаете slf4j-api.jar на вашем пути к классам. С SLF4J вам всегда нужно slf4j-api.jar и еще один jar для привязки каркаса логирования . И на самом деле, если вам не нужна регистрация, используйте slf4j-nop.jar вместо slf4j-log12.jar.

Обновление: Кажется, что Mahout доступен в центральном репозитории Maven, поэтому использование Maven может упростить процесс настройки пути к классам. И если вы не знакомы с Maven, подумайте об использовании MOP , который является средством запуска командной строки, для запуска Java-программ, которые могут прозрачно загружать артефакты Maven и их зависимости и настраивать ваш путь к классам.

1 голос
/ 10 марта 2010

Если вы используете Mahout, имейте в виду, что после того, как вы соберете его с Maven, он сгенерирует файлы "* .job" в каталоге target /, которые содержат все зависимости, упакованные вместе. Это просто файл .jar.

1 голос
/ 20 февраля 2010

Время компиляции классов звучит правильно; путь к классу выполнения неправильный.

Из Javadoc для этого класса:

Брошен, если виртуальная машина Java или экземпляр ClassLoader пытается загрузить в определении класса (как часть нормального вызова метода или как часть создание нового экземпляра с использованием нового выражение) и нет определения класс можно найти.

искомое определение класса существовал, когда в настоящее время выполняется класс был скомпилирован, но определение больше не может быть найден.

Видите ли вы файл Test.class в текущем каталоге? Возможно, вы скомпилировали его по другому пути по ошибке.

...