У меня есть программа JAVA, которая соединяет с MySQL и исполнителями некоторые задачи обновления. Теперь я хочу экспортировать приложение в файл jar
с включенным пакетом JDBC. Я делаю что-то вроде (pwd
для всех следующих команд: /home/tnp/UpdateServer_SRC/bin/
):Экспорт jdbc в файл проекта jar
$ echo $CLASSPATH
.:/home/tnp/UpdateServer_SRC/bin/update/server:/home/tnp/UpdateServer_SRC/bin/update/server/jdbc.jar
$ java update.server.Main
Latest: 12177
IGNORING: 12172
IGNORING: 12173
IGNORING: 12174
IGNORING: 12175
IGNORING: 12176
IGNORING: 12177
^C
до сих пор так липкая, Бросаю исполнение, как он выполняет их в цикле в то время как каждые 30 минут.
Теперь, создавая jar
файл:
$ jar cvf sth.jar update
added manifest
adding: update/(in = 0) (out= 0)(stored 0%)
adding: update/server/(in = 0) (out= 0)(stored 0%)
adding: update/server/ThreadNetwork.class(in = 1866) (out= 1021)(deflated 45%)
adding: update/server/HomePage.class(in = 2046) (out= 1184)(deflated 42%)
adding: update/server/jdbc.jar(in = 876733) (out= 837707)(deflated 4%)
adding: update/server/UpdateLast5.class(in = 2045) (out= 1179)(deflated 42%)
adding: update/server/Main.class(in = 742) (out= 504)(deflated 32%)
adding: update/server/Notice.class(in = 2715) (out= 1521)(deflated 43%)
Ok. Создан файл Jar. Давайте попробуем запустить его:
$ java -jar sth.jar
no main manifest attribute, in sth.jar
О, pwd
не в моем текущем пути класса. Позвольте мне еще раз повторить:
$ java -cp sth.jar update.server.Main
Latest: 12177
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at update.server.UpdateLast5.run(UpdateLast5.java:18)
at java.lang.Thread.run(Thread.java:724)
Exception in thread "Thread-0" java.lang.NullPointerException
at update.server.UpdateLast5.run(UpdateLast5.java:40)
at java.lang.Thread.run(Thread.java:724)
И эта стекловата бросается. Я видел на another question что:
В случае баночек, то
-cp
и-classpath
аргументы и переменная среда%CLASSPATH%
игнорируются.
и мне нужно будет вручную изменить файл MANIFET.MF
и заново создать банку. Но связанный выше ответ утверждает, что путь класса должен относиться к моему собственному файлу jar (sth.jar
) и не упоминает, что делать с связанными файлами jar.
Как импортировать JDBC в свой пакет, чтобы полученный файл jar функционировал нормально. Любая помощь будет оценена по достоинству.
Почему вы не используете Eclipse? Он может сделать это легко. – elias