2015-06-05 7 views
1

Я работаю над существующим проектом, который нацелен на обновление с java6 на java8, но когда я развертываю всю свою банку на сервер, он отлично работает, если клиентская машина запущена в java6. но для java8, он не запущен в JNLP которая причинилаОшибка Jnlp Java Web Start: java.lang.NoClassDefFoundError:

#### Java Web Start Error: 
#### java.lang.NoClassDefFoundError:org/springframework/context/ApplicationContext 

После поиска в Google, я узнать некоторые правила о том, как использовать файл манифеста.

Я стараюсь, чтобы подписать всю банку с

jarsigner -keystore myKeys -storepass changeit XXXX.jar 

и экспортировать MyKeys как файл Серф, а затем импортировать на компьютер клиента, то он может успешный запуск в JRE6 даже не задавая вопрос.

Но для Java8, он не в состоянии запустить с классом не найдены даже Серф импортируется, и я обнаружил, что это может быть, я пропускаю некоторые атрибуты безопасности моей баночке Тогда я следую за этот пост, добавив поле http://www.captaincasademo.com/forum/posts/list/1988.page

attribute name="Permissions" value="all-permissions 
attribute name="Codebase" value="*" 
attribute name="Application-Library-Allowable-Codebase"value="*" 
attribute name="Caller-Allowable-Codebase" value="*" 
attribute name="Trusted-Only" value="true" 
attribute name="Trusted-Library" value="true" 

мой проект на самом деле выглядеть в этой структуре

/lib/spring.jar 
/lib/commons.jar 
/lib/xxxCommon.jar 
client.jnlp(herf to xxxClient.jar) 
xxxClient.jar 

Я почти проверить всю картину в этом файле манифеста, такие как xxxClient.jar с доверенной-LiBr ичных правда /lib/spring.jar с доверяющей библиотекой истинного или xxxClient.jar со всеми разрешениями- /lib/spring.jar с доверенной библиотекой верно или я даже удалить все атрибуты безопасности. И это не удается классу, который не найден.

Я знаю, что причина (из другого сообщения), потому что доверенная библиотека и ненадежная библиотека загружается разным загрузчиком классов, поэтому, если spring.jar является ненадежным, он будет молча игнорировать.

Даже я отмечаю xxxClient.jar (мой проект jar) с/not с доверенной библиотекой или spring.jar доверенной/не проверенной библиотекой, все они не работают с таким же классом операторов.

Благодаря я работаю на обслуживание долга, я не могу изменить, как Class.forName(), Class.getResource(), которые приходят из http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/security/manifest.html

является то, что любой способ, которым я могу обновить успеха от JRE6 для JRE8 без изменений кода? Большое спасибо

Кстати, атрибут манифеста jar добавлен муравьем, как и предыдущий код и сторонняя банка (spring.jar). Я применяю jar -ucf для обновления внутреннего файла манифеста.

Большое спасибо !!!

ответ

0

Finially мой манифест выглядеть как этого

Application-Name: xxxxx-Client 
Permissions: all-permissions 
Codebase: * 
Trusted-Only: true 

Но на самом деле я не уверен, что он работает или нет, потому что главное изменение моего файл JNLP. Мой первоначальный вид JNLP файл как этот

<security> 
    <all-permissions/> 
</security> 
<resources> 
    <j2se version="1.6+" /> 
    <jar href="XXXX-Client.jar"/> 
    <nativelib href="lib/commons-io-1.4.jar"/> 
    <nativelib href="lib/commons-logging.jar"/> 
    <nativelib href="lib/commons-net-1.4.1.jar"/> 
    <nativelib href="lib/spring.jar"/> 
    ...... 

Из официального документа, я думаю nativelib или фляга does't дело в моем апплете. Кому это нужно, он запускается в корне или нет. Я изменил его пользователя «банку» и нажимной spring.jar на более высокий уровень

<security> 
    <all-permissions/> 
</security> 
<resources> 
    <j2se version="1.6+" /> 
    <jar href="XXXX-Client.jar"/> 
    <jar href="lib/spring.jar"/> 
    <jar href="lib/commons-io-1.4.jar"/> 
    <jar href="lib/commons-logging.jar"/> 
    <jar href="lib/commons-net-1.4.1.jar"/> 
    ..... 

Тогда ничего не пойдет не так !!!! Я не могу определить, почему это исправлено, или какая часть важна. Поскольку исходный jnlp отлично работает в JRE6 без ошибок.