Развертывание Java-приложения, скомпилированного с Netbeans - Не могу найти сторонний класс - PullRequest
0 голосов
/ 12 августа 2010

Я построил свое приложение в Netbeans 6.8.Приложение содержит различные ссылки на сторонние продукты (например, драйвер базы данных Microsoft для SQL Server и JIDE).

При компиляции он создает папку dist, которая, как я думал, вы можете просто скопировать в папку, и она будет работать.

Когда я запускаю свое приложение, как только оно встречает ссылку в форме на классы JIDE, приложение сообщает об ошибке и завершает работу.

По сути, трассировка стека:

java.lang.reflect.InvocationTargetException<br> Caused by: java.lang.ClassNotFoundException: com.jidesoft.gantt.PeriodBackgroundPainter 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)

У меня есть файлы JAR, скопированные в папку lib в папке, где находится мой файл jar.
\MyApp \ MyJar.jar
\ MyApp \ lib \ all jars приложения

Однако, когда я копирую содержимое папки lib в C: \ Program Files \ Java \ jre6 \ lib \ ext, все работаетхорошо.

Я что-то упустил?Я работаю на Vista SP2.

Я создал новый простой проект с той же ссылкой на компоненты JIDE и скомпилировал его.Когда я запускаю файл jar, приложение запускается и отображает компоненты.Единственное видимое различие между проектами, которое я вижу, - это соглашения об именах используемых пакетов.Наше основное приложение не соответствует стандартному именованию com.company.application и содержит различные имена пакетов, содержащиеся в нем.Мое приложение использует соглашение com.company.application.

Cheers,

Andez

Ответы [ 2 ]

2 голосов
/ 12 августа 2010

Это может быть проблемой пути к классам, когда вы запускаете Java-программу, вам нужно установить путь к классам, чтобы включить все библиотеки, которые нужны вашей программе.По умолчанию вы будете загружать библиотеки jre-wide, поэтому размещение файлов jar в% JAVA_HOME% / lib или% JAVA_HOME% / lib / ext будет работать (но эти файлы jar будут доступны для любого выполняемого вами кода, который вы, вероятно, не сделалиintend).

Убедитесь, что в командной строке указан аргумент -classpath, например

java foo.bar.Baz -classpath.; ./ lib / jide-oss.jar

0 голосов
/ 12 августа 2010

Приветствия за попытку помочь Джону.

Я попытался упростить пост здесь, так как думал, что это проблема с classpath. После того, как вы дали мне немного намека и что-то в офисе кто-то сказал о манифесте, я взглянул на содержимое файла фляги.

Наше приложение состоит из множества сторонних jar-файлов и множества пакетов, которые включали импортированные файлы классов от сторонних производителей.

Я наткнулся на папку META-INF в банке и заметил INDEX.LIST и MANIFEST.MF. У моего другого чистого проекта был только файл MANIFEST.MF. Я удалил INDEX.LIST из файла jar нашего приложения, и все заработало. Но каждый раз, когда я компилировал, он генерировал INDEX.LIST. Я посмотрел на сайте ANT, но не мог понять, почему это генерируется.

Я снова посмотрел код souce, и в проекте был пакет META-INF. Не слишком уверен, откуда он взялся или кто его там поместил. Но я удалил его, и все, кажется, работает в минуту - хотя я только протестировал около 5% приложения.

Приветствия,

Andez

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