4

我维护一个使用 WebStart 启动的 Eclipse RCP 应用程序。Java 7 u45 进行了一些安全更改,现在我的应用程序在启动时崩溃了。

我已添加到清单中:

权限:所有权限

代码库:*

可信库:true

这从控制面板中删除了所有警告消息。但是在尝试加载我的 IApplication 实现时,我仍然遇到类加载器问题,这可能是我要加载的第一个类。这是更新 45 的新内容。

4

3 回答 3

3

我遇到了同样的问题,并通过执行以下操作设法解决了它:

在所有清单文件(对于 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>
于 2013-10-31T10:51:44.980 回答
0

当 7u25 出现时,我的应用程序会因类加载器问题而崩溃(有时,这很奇怪)。修复涉及取消我的“Components.jnlp”部署策略。我将我的库文件放在一个单独的 .jnlp(Components.jnlp,根据我在 2010 年在线阅读的解决方案)中,我的主要 .jnlp(launch.jnlp)将加载该 .jnlp。

现在,似乎 Netbeans 生成的 .jnlp 就足够了,我不再需要任何单独的 .jnlp 库组件。我不确定eclipse是否给你一个自动生成的.jnlp。

最后,更改launch.jnlp 让我不得不为我的客户提供一个新的安装程序,以便将新的.jnlp 加载到他们的计算机上。它很糟糕,但它起作用了。

另外,我不确定Codebase: *应该做什么。你为什么不把你的实际代码库放在那里?

如果您没有使用这种方法部署您的应用程序,那么这个答案可能无济于事。可能会帮助某人。

于 2013-10-17T11:36:21.140 回答
0

到目前为止,我们已经有多个 JNLP 文件,而且它似乎工作。

我们将我们的应用程序安装在客户内部网络上,因此我们无法设置除 * 以外的代码库,而无需为每个客户退出整个 jar 集。

于 2013-10-17T11:59:30.633 回答