我维护一个使用 WebStart 启动的 Eclipse RCP 应用程序。Java 7 u45 进行了一些安全更改,现在我的应用程序在启动时崩溃了。
我已添加到清单中:
权限:所有权限
代码库:*
可信库:true
这从控制面板中删除了所有警告消息。但是在尝试加载我的 IApplication 实现时,我仍然遇到类加载器问题,这可能是我要加载的第一个类。这是更新 45 的新内容。
我维护一个使用 WebStart 启动的 Eclipse RCP 应用程序。Java 7 u45 进行了一些安全更改,现在我的应用程序在启动时崩溃了。
我已添加到清单中:
权限:所有权限
代码库:*
可信库:true
这从控制面板中删除了所有警告消息。但是在尝试加载我的 IApplication 实现时,我仍然遇到类加载器问题,这可能是我要加载的第一个类。这是更新 45 的新内容。
我遇到了同样的问题,并通过执行以下操作设法解决了它:
在所有清单文件(对于 RCP 项目中的每个 JAR)中添加以下属性:
Application-Name: My App Name
Permissions: all-permissions
Codebase: *
Application-Library-Allowable-Codebase: *
Caller-Allowable-Codebase: *
Trusted-Library: true
解决方案的第二部分是通过添加 jnlp 前缀来使 jnlp 属性安全。我在这里找到了解决方案。您需要为框架属性(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"/>
从这里下载带有源的 eclipse 启动器
在 web start 启动器中,您需要将属性名称改回旧值(不带 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);
}
}
}
将您的新启动器导出为可运行的 JAR,并将其放在 JNLP 文件所在的同一目录中。
通过添加以下行来编辑 JNLP 文件:
<jar href="myAppLauncher.jar"/>
内部标签并像这样编辑您的 application-desc 标签:
<application-desc main-class="org.eclipse.equinox.launcher.WebStartMain">
</application-desc>
当 7u25 出现时,我的应用程序会因类加载器问题而崩溃(有时,这很奇怪)。修复涉及取消我的“Components.jnlp”部署策略。我将我的库文件放在一个单独的 .jnlp(Components.jnlp,根据我在 2010 年在线阅读的解决方案)中,我的主要 .jnlp(launch.jnlp)将加载该 .jnlp。
现在,似乎 Netbeans 生成的 .jnlp 就足够了,我不再需要任何单独的 .jnlp 库组件。我不确定eclipse是否给你一个自动生成的.jnlp。
最后,更改launch.jnlp 让我不得不为我的客户提供一个新的安装程序,以便将新的.jnlp 加载到他们的计算机上。它很糟糕,但它起作用了。
另外,我不确定Codebase: *
应该做什么。你为什么不把你的实际代码库放在那里?
如果您没有使用这种方法部署您的应用程序,那么这个答案可能无济于事。可能会帮助某人。
到目前为止,我们已经有多个 JNLP 文件,而且它似乎工作。
我们将我们的应用程序安装在客户内部网络上,因此我们无法设置除 * 以外的代码库,而无需为每个客户退出整个 jar 集。