4

私は、WebStart で起動された Eclipse RCP アプリケーションを保守しています。Java 7 u45 でいくつかのセキュリティ変更が行われたため、起動時にアプリケーションがクラッシュします。

マニフェストに追加しました:

権限: すべての権限

コードベース: *

Trusted-Library: 真

これにより、コントロール パネルからすべての警告メッセージが削除されました。しかし、おそらく最初にロードするクラスである 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

解決策の 2 番目の部分は、jnlp prefix を追加して jnlp プロパティを安全にすることです。ここで解決策を見つけました。フレームワークのプロパティ(osgi、eclipse ..)と、次の代わりにプロパティEgに対してこれを行う必要があります。

<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 Launcher では、プロパティ名を古い値(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

これまでに複数の JNLP ファイルがありましたが、動作しているように見えました。

お客様の内部ネットワークにアプリをインストールするため、お客様ごとに jar のセット全体を再署名せずに * 以外のコードベースを設定することはできません。

于 2013-10-17T11:59:30.633 に答える
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 に答える