我维护了一个使用WebStart启动的Eclipse RCP应用程序。 Java 7 u45进行了一些安全性更改,现在我的应用程序在启动时崩溃了。
我已添加到清单中:
权限:所有权限
代码库:*
Trusted-Library:true
这会从控制面板中删除所有警告消息。但是在尝试加载我的IApplication实现时仍然有一个类加载器问题,可能是我要加载的第一个类。这是更新45的新内容。
答案 0 :(得分:3)
我遇到过同样的问题,并通过以下方式解决了这个问题:
在所有清单文件中(对于RCP项目中的每个JAR)添加以下属性:
Application-Name: My App Name
Permissions: all-permissions
Codebase: *
Application-Library-Allowable-Codebase: *
Caller-Allowable-Codebase: *
Trusted-Library: true
解决方案的第二部分是通过添加jnlp前缀使jnlp属性安全。我找到了解决方案here。您需要为框架属性执行此操作(osgi,eclipse ..)和您的属性例如。而不是:
<property name="eclipse.product" value="com.amdosoft.oct.ui.product"/>
<property name="osgi.instance.area" value="@user.home/Application Data/myApp"/>
<property name="osgi.configuration.area" value="@user.home/Application Data/myApp"/>
<property name="my.App.property" value="someValue"/>
使用
<property name="jnlp.eclipse.product" value="com.amdosoft.oct.ui.product"/>
<property name="jnlp.osgi.instance.area" value="@user.home/Application Data/myApp"/>
<property name="jnlp.osgi.configuration.area" value="@user.home/Application Data/myApp"/>
<property name="jnlp.my.App.property" value="someValue"/>
使用来自here
的来源下载eclipse启动器在网络启动启动器中,您需要将属性名称更改为旧值(不含jnlp前缀)。您可以通过将此部分源添加到WebStartLauncher类的main方法中来实现。
Properties properties = System.getProperties();
// copy properties to avoid ConcurrentModificationException
Properties copiedProperties = new Properties();
copiedProperties.putAll(properties);
Set<Object> keys = copiedProperties.keySet();
for (Object key : keys) {
if (key instanceof String) {
String keyString = (String) key;
if (keyString.startsWith("jnlp.")) {
// re set all properties starting with the jnlp-prefix
// and set them without the prefix
String property = System.getProperty(keyString);
String replacedKeyString = keyString.replaceFirst("jnlp.", "");
System.setProperty(replacedKeyString, property);
}
}
}
将新的启动器导出为runnable JAR ,并将其放在JNLP文件所在的同一目录中。
通过添加以下行编辑JNLP文件:
<jar href="myAppLauncher.jar"/>
在标签内部并编辑你的application-desc标签,如下所示:
<application-desc main-class="org.eclipse.equinox.launcher.WebStartMain">
</application-desc>
答案 1 :(得分:0)
当7u25出现时,我的应用程序会因类加载器问题而崩溃(有时,它很奇怪)。该修复涉及修复我的“Components.jnlp”部署策略。我把我的库文件放在一个单独的.jnlp(Components.jnlp,根据我在2010年在线阅读的解决方案),我的主.jnlp(launch.jnlp)将加载.jnlp。
现在,似乎Netbeans生成的.jnlp已足够,我不再需要任何单独的.jnlp用于库组件。我不确定eclipse是否会为您提供自动生成的.jnlp。
最后,更改launch.jnlp涉及到我必须为我的客户端提供一个新的安装程序,将新的.jnlp加载到他们的计算机上。它很糟糕但很有效。
另外,我不确定Codebase: *
应该做什么。你为什么不把你的实际代码库放在那里?
如果您没有使用该方法部署您的应用程序,那么这个答案可能无济于事。可能会帮助别人。
答案 2 :(得分:0)
到目前为止,我们已经拥有多个JNLP文件,它似乎有效。
我们在客户内部网络上安装我们的应用程序,因此我们无法设置除*之外的代码库,而无需为每位客户重新设置整套jar。