Ошибка пути к классам - невозможно найти основной класс и log4j - PullRequest
0 голосов
/ 21 февраля 2012

Я пытаюсь запустить jar с помощью этой команды в моем сценарии оболочки -

java -Dlog4j.configuration=path/to/log4j.properties -classpath path/to/log4j.jar:path/to/another.jar -cp my/jarfile/to/run/myjar.jar com.xyz.TestSuiteRunner CREATE_4_SL

Но когда я запускаю это, я получаю ошибку, как показано -

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger

at com.xyz.TestSuiteRunner.<clinit>(TestSuiteRunner.java:27) 
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 1 more
Could not find the main class: com.xyz.TestSuiteRunner.  Program will exit.

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

1 Ответ

1 голос
/ 21 февраля 2012

У вас есть оба переключателя -classpath и -cp;-cp - это просто сокращение от -classpath, и вы не можете иметь более одного из них.Последний является тем, который «залипает», поэтому никакие классы, названные в первом переключателе -classpath, не будут найдены.Вам нужно объединить эти аргументы в один длинный путь;т. е.

-classpath path/to/log4j.jar:path/to/another.jar:my/jarfile/to/run/myjar.jar

Ошибка, связанная с невозможностью найти основной класс, представляет собой нечто вроде красной сельди;класс явно найден, его просто невозможно инициализировать, поскольку его зависимости не найдены.

...