Как управлять зависимостями в Java - PullRequest
2 голосов
/ 14 марта 2011

Я совершенно новичок в Java и пытаюсь создать программу Hadoop MapReduce.Я добавил /usr/lib/hadoop/hadoop-core.jar, и все работает нормально.Когда я экспортирую проект как jar file и пытаюсь его запустить, он дает мне ClassNotFoundException, когда я запускаю его, потому что он не находит, где найти hadoop-core.jar.Как мне решить это?

Ответы [ 5 ]

2 голосов
/ 14 марта 2011

Один из способов - добавить ссылку на требуемый ресурс в файл манифеста основного Jar-файла.Ссылки являются относительными, поэтому наиболее распространенной практикой является обеспечение того, чтобы основной и зависимый Jar-файлы находились в одном каталоге.

При развертывании в качестве апплета на Jar можно ссылаться в атрибуте архива элемента applet.

При развертывании с использованием Java Web Start на Jar можно ссылаться в файле запуска JNLP.


Редактировать 1: Пример манифеста, предполагающего, что зависимый Jar находится в подпункте 'hadoop'.каталог, в котором находится приложение.находится.

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Main-Class: org.pscode.wigglyworms.WigglyWorms
Class-Path: hadoop/hadoop-core.jar
Implementation-Title: Wiggly Worms
Implementation-Version: 11.03.13
Implementation-Vendor: PSCode - Andrew Thompson
Implementation-Vendor-Id: org.pscode
Created-By: 1.6.0-b105 (Sun Microsystems Inc.)

Обратите внимание, что файл манифеста должен заканчиваться одной пустой строкой (которую трудно представить даже с использованием режима «предварительно отформатированный» для кода).По этой причине я настоятельно рекомендую оставить создание манифеста для инструмента, который знает, как их написать.Мой выбор - инструмент сборки Ant.

Для получения дополнительной информации см. Добавление классов в раздел Classpath файла JAR урока «Упаковка программ в файлы JAR» Учебного руководства по Java.

1 голос
/ 14 марта 2011

Команда jar не будет содержать hadoop-core.jar внутри созданной вами банки.Поэтому во время выполнения (т. Е. Когда вы выполняете команду java), вам нужно указать hadoop в вашем classpath.Проверьте аргумент командной строки -cp или -classpath.В основном это будет выглядеть примерно так:

java -cp myjar.jar;hadoop-core.jar package.Main
1 голос
/ 14 марта 2011
0 голосов
/ 14 марта 2011

Самый простой способ - использовать File -> Export -> Runnable jar, который предоставляет несколько вариантов для того, что вам нужно.

0 голосов
/ 14 марта 2011

Когда вы запускаете файл jar, который вы создали, он должен иметь переменную окружения CLASSPATH, которая содержит полный путь к /usr/lib/hadoop/hadoop-core.jar, он может выглядеть примерно так

set CLASSPATH=/usr/lib/hadoop/hadoop-core.jar
export CLASSPATH

Существуют и другие методы, но основная идея заключается в том, что ваша JVM знает, где находятся классы, которые вы создали, но не знает, где искать классы hadoop-core.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...