Проблема с classpath, включающая импорт из файла JAR - PullRequest
2 голосов
/ 09 июня 2011

У меня возникла та же проблема, что и здесь: исключение-в-нити-main-java-lang-noclassdeffounderror-неправильное-имя

У меня не было проблем с запуском Eclipse, но с терминалом я получил NoClassDef. Поднятие одной папки и выполнение java <package-name>.<class-name> отлично работали.

Мой простой код следующий:

package temp;

import org.fusesource.jansi.Ansi;

public class Test {

    public static void main(String[] args) {

        System.out.println("I'm going to blow on the next line!");
        System.out.println( Ansi.ansi().eraseScreen().render("@|bold,red Hello|@ @|green World|@") );

    }

}

Я знаю, что этот код запускается, потому что я скопировал его со страницы автора Янси . Это библиотека для цветной печати на терминале Windows. Что мне нужно сделать, чтобы запустить этот класс? Помощь очень ценится.


[UDPATE: РЕШЕНИЕ]

Мне посоветовали создать банку приложения, которое я пытался протестировать, а затем запустить эту банку. Поэтому я создал jar "jprinter", содержащий все мои файлы (а не внешний jar, который я использовал) и тестовый класс с main. После этого я мог выполнить в любой папке

java -cp ".\lib\jprinter-1.15.jar;.\lib\*" print.test.Test

где lib - папка с моими и другими используемыми банками; print.test - это пакет класса Test, который содержит метод main.


[устареть:] Я попытался выполнить, запустив java .:..\lib\jansi-1.4.jar temp.Test, который дал мне следующий вывод:

I'm going to blow on the next line!
Exception in thread "main" java.lang.NoClassDefFoundError: org/fusesource/jansi/Ansi
        at temp.Test.main(Test.java:13)

И я также попытался выполнить, запустив java ".:..\lib\jansi-1.4.jar" temp.Test или java ".;..\lib\jansi-1.4.jar" temp.Test, который дал мне следующий вывод:

Exception in thread "main" java.lang.NoClassDefFoundError: \lib\jansi-1.4\jar
Caused by: java.lang.ClassNotFoundException: .:..\lib\jansi-1.4.jar
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

Ответы [ 3 ]

4 голосов
/ 09 июня 2011

Вы должны добавить эту библиотеку в ваш путь к классам. Попробуйте запустить его так:

java -cp .:<path_to_your_jansi_jar> temp.Test

Обратите внимание, что разделитель зависит от платформы. В системе Unix следует использовать «:», в системе Windows это будет «;»:

java -cp .;<path_to_your_jansi_jar> temp.Test

В вашем конкретном случае это будет, вероятно, так:

java -cp .;..\lib\jansi-1.4.jar temp.Test
1 голос
/ 09 июня 2011

Вы должны указать -classpath, где находится "org.fusesource.jansi.Ansi".Подробнее см. classpath

или лучше classpath

0 голосов
/ 23 июня 2011

[UDPATE: РЕШЕНИЕ]

Мне посоветовали создать банку приложения, которое я пытался протестировать, а затем запустить эту банку. Поэтому я создал jar "jprinter", содержащий все мои файлы (а не внешний jar, который я использовал) и тестовый класс с main. После этого я мог выполнить в любой папке

java -cp ".\lib\jprinter-1.15.jar;.\lib\*" print.test.Test

где lib - папка с моими и другими используемыми банками; print.test - это пакет класса Test, который содержит метод main.

...