Не удается найти главный class в файле, составленном с помощью Ant

Я компилирую и запускаю свою программу в Eclipse, и все работает нормально, но когда я упаковываю ее с помощью Ant и запускаю ее, я получаю эту ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: org/supercsv/io/ICsvB eanReader Caused by: java.lang.ClassNotFoundException: org.supercsv.io.ICsvBeanReader at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: jab.jm.main.Test. Program will exit. 

Обратите внимание, что это ошибка времени выполнения, а не ошибка компилятора с Ant.

Я построил этот проект в прошлом с 0 проблемами, и теперь он внезапно действует на меня, когда я добавляю второй пакет в свою папку lib ?

Вот файл сборки для справки:

    Builds client files into .jar                     <!--  -->                            

Заранее спасибо за помощь!

РЕДАКТИРОВАТЬ:

Вот как выглядит конструкция моего основного classа (это не фактический файл, но это то, на чем я основывался). Конструкция очень странная для java-программы и может дать Ant некоторые проблемы. Любые рекомендации по их восстановлению? При попытке разделить это на несколько частей я получил кучу ошибок. Я никогда не видел такой конструкции раньше (да, я понимаю, КАК это работает (и это происходит при компиляции), но Ant может не понравиться).

 import java.io.FileReader; import java.io.IOException; import org.supercsv.cellprocessor.Optional; import org.supercsv.cellprocessor.ParseDate; import org.supercsv.cellprocessor.ParseInt; import org.supercsv.cellprocessor.constraint.StrMinMax; import org.supercsv.cellprocessor.constraint.Unique; import org.supercsv.cellprocessor.ift.CellProcessor; import org.supercsv.io.CsvBeanReader; import org.supercsv.io.ICsvBeanReader; import org.supercsv.prefs.CsvPreference; class ReadingObjects { static final CellProcessor[] userProcessors = new CellProcessor[] { new Unique(new StrMinMax(5, 20)), new StrMinMax(8, 35), new ParseDate("dd/MM/yyyy"), new Optional(new ParseInt()), null }; public static void main(String[] args) throws Exception { ICsvBeanReader inFile = new CsvBeanReader(new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE); try { final String[] header = inFile.getCSVHeader(true); UserBean user; while( (user = inFile.read(UserBean.class, header, userProcessors)) != null) { System.out.println(user.getZip()); } } finally { inFile.close(); } } } public class UserBean { String username, password, town; Date date; int zip; public Date getDate() { return date; } public String getPassword() { return password; } public String getTown() { return town; } public String getUsername() { return username; } public int getZip() { return zip; } public void setDate(final Date date) { this.date = date; } public void setPassword(final String password) { this.password = password; } public void setTown(final String town) { this.town = town; } public void setUsername(final String username) { this.username = username; } public void setZip(final int zip) { this.zip = zip; } } 

Обратите внимание, как имя classа фактически является UserBean и содержит непубличный class с именем ReadingObjects внутри него, который содержит основной метод.

Похоже, что в вашем пути к запуску отсутствует jar, содержащий class org.supercsv.io.ICsvBeanReader .

В результате вы не можете установить путь classа из командной строки при вызове исполняемого банку. Вы должны установить его в манифесте следующим образом:

                    к                    

Этот подход позволит вам запустить банку следующим образом:

 java -jar CC.jar 

Без дополнительной манифеста вы должны запустить банку следующим образом:

 java -cp CC.jar:CC-DSTAMPVALUE.jar jab.jm.main.Test 

Заметка

Только CC.jar является исполняемым и нуждается в специальном манифесте. Использование этого шаблона означает, что будущие дополнительные банки, помещенные в каталог lib, будут автоматически включены в путь classа времени выполнения. (Полезно для зависимостей с открытым исходным кодом, таких как log4j)

Очевидно, что при запуске CC.jar вы получите аналогичную ошибку, если файлы jar отсутствуют 🙂

Вы пытались явно указать путь к classу при запуске jar, чтобы убедиться, что на нем установлена ​​новая библиотека?

Возможно, библиотека 1 присутствует в пути по умолчанию, поэтому ваш проект прошел нормально, пока вы не добавили библиотеку 2, которой не было. При работе в Eclipse среда IDE может автоматически добавлять библиотеку 2 в путь к classам. Вы можете проверить путь к classам в вашей конфигурации запуска проекта в Eclipse и убедиться, что вы включаете все там, когда не работаете через среду IDE.

Это может происходить из-за расположения генерируемых файлов classов. т.е. когда вы создаете сквозное затмение, он генерирует файлы classов в местоположении, которое указано как папка «Выход» для ex: bin, и во время работы он просматривает это местоположение для файлов classов.

Поэтому проверьте, генерирует ли ваш муравьев файлы classов в том же месте, что и папка вывода, указанная в конфигурации BuildPath. Если не изменить местоположение выходной папки в том месте, где ваш муравей генерирует файлы classов .

  • Самый эффективный способ протоколирования сообщений в JavaFX TextArea через streamи с помощью простых пользовательских фреймворков регистрации
  • Если / else в ANTLR с использованием прослушивателей
  • Это плохая практика, чтобы поймать Throwable?
  • getClass (). getClassLoader () имеет значение null, почему?
  • Как отладить приложение Spring Boot с Eclipse?
  • javac error: имена classов принимаются только в том случае, если обработка annotations явно запрашивается
  • Разбор строки JSON в Java
  • Как я могу получить код статуса HTTP из ServletResponse в ServletFilter?
  • getResourceAsStream () vs FileInputStream
  • Как добавить узел в существующий файл XML в java
  • Компилятор Java TreeMap
  • Interesting Posts

    Ошибка сегментации в strcpy ()

    Как инвертировать / перевернуть экран на окнах xp?

    Как получить ширину экрана без (минус) полосы прокрутки?

    Как закрыть окно поиска в Firefox с помощью сочетания клавиш, когда это поле не в фокусе?

    Отображать специальные символы, используя System.out.println

    Проверка на стороне сервера версии 3 для покупок в приложении Google Play

    Насколько хорошо IE7 / 8 режим в IE9 сравнивается с фактически запущенным IE7 / 8

    Ссылка на ресурс, размещенный в папке WEB-INF в JSP-файле, возвращает HTTP 404 на ресурсе

    Torrent-клиент для Ubuntu похож на uTorrent

    Возможно изменение Windows 8 "Горячие углы"

    Есть ли способ заставить Windows 7 установить .iso на USB-накопитель из OSX?

    ResultSet: получение значений столбцов по индексу по сравнению с извлечением по метке

    Как я могу провести сравнение строк без учета регистра?

    Может ли Mozilla Thunderbird отправлять отправленные ответы в виде потока?

    С «N» нет узлов, сколько различных двоичных и двоичных поисковых деревьев возможно?

    Давайте будем гением компьютера.