Я обнаружил МНОГИЕ потоки по упаковке всех зависимостей вместе с проектом в один пакет jar, и кажется, что для этого есть много разных способов (oneJar, FatJar, Ant-build ...)
Так, готовя мой собственный рецепт, я (после некоторых усилий) сумел упаковать проект, над которым я работаю.В этом одном jar-файле содержится код проекта плюс все jar-файлы, от которых зависит проект, которые загружаются с jar-in-jar-loader
, который поставляется с eclipse.Результирующий продукт прекрасно работает на ряде различных платформ, когда он запускается через терминал, вызываемый через java -jar myjarfile
.
Пиччи, можно сказать, вот в чем проблема;когда я подписываю свой jar и пытаюсь запустить его через javaws (что является конечной целью здесь), я получаю исключение, которое я расшифровал, чтобы означать библиотеки (в случае ниже org.apache.commons.lang.SystemUtils)недоступны .
Так вот мой вопрос;нельзя ли загружать jar-файлы в jars при развертывании приложений для Java Web Start? Если это возможно, что я делаю не так?Если нет, то какая лучшая альтернатива?
Спасибо!
Ниже приведен файл JNLP вместе с stackTrace, который я получаю при запуске javaws myJNLPfile
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+"
codebase="file:///home/ukirik/workspace/myproject/dist"
href="project.jnlp">
<information>
<!-- Project info -->
</information>
<security>
<all-permissions />
</security>
<resources os="Mac\ OS\ X">
<j2se version="1.6+" java-vm-args="-XstartOnFirstThread"/>
</resources>
<resources>
<jar href="myjar-jws.jar" />
</resources>
<application-desc main-class="org.gvt.RuntimeMain"/>
</jnlp>
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.javaws.Launcher.executeApplication(Launcher.java:1799)
at com.sun.javaws.Launcher.executeMainClass(Launcher.java:1745)
at com.sun.javaws.Launcher.doLaunchApp(Launcher.java:1507)
at com.sun.javaws.Launcher.run(Launcher.java:129)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/lang/SystemUtils
at org.gvt.RuntimeMain.loadSwtJar(RuntimeMain.java:27)
at org.gvt.RuntimeMain.main(RuntimeMain.java:13)
... 9 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.SystemUtils
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 com.sun.jnlp.JNLPClassLoader.findClass(JNLPClassLoader.java:332)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 11 more