5

Java 7u40 での最後のセキュリティ変更以降、JNLP ファイルに署名する必要があります。これは、 JNLP-INF/APPLICATION.JNLPに最終的な JNLP を追加するか、署名されたメイン jar のJNLP-INF/APPLICATION_TEMPLATE.JNLPにテンプレート JNLP を提供することで実行できます。

最初の方法はうまく機能しますが、これまで知られていない数のランタイム引数をアプリケーションに渡せるようにしたいと考えています。

したがって、APPLICATION_TEMPLATE.JNLP は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<jnlp codebase="*">
    <information>
        <title>...</title>
        <vendor>...</vendor>
        <description>...</description>
        <offline-allowed />
    </information>
    <security>
        <all-permissions/>
    </security>
    <resources>
        <java version="1.7+" href="http://java.sun.com/products/autodl/j2se" />
        <jar href="launcher/launcher.jar" main="true"/>
        <property name="jnlp...." value="*" />
        <property name="jnlp..." value="*" />
    </resources>
    <application-desc main-class="...">
        *
    </application-desc>
</jnlp>

問題は、 application-descタグ内の *です。

複数の引数タグを使用して固定数の引数をワイルドカードすることは可能ですが(以下のコードを参照)、アプリケーションに提供する引数の数を増減することはできません (Java Webstart は空の引数タグで開始しません)。

    <application-desc main-class="...">
        <argument>*</argument>
        <argument>*</argument>
        <argument>*</argument>
    </application-desc>

誰かがこの問題を確認できますか、および/または以前に未定義の数のランタイム引数を Java アプリケーションに渡すための解決策を持っていますか?

どうもありがとう!

4

1 に答える 1

8

JNLP 7仕様を読んだ後にわかることから、あなたが望むことはできないようです。アスタリスクは、複数の XML 要素ではなく、テキスト データのみを表すことができます。

あなたの状況では、mainメソッドが単一の引数を独自に解析できるようにして、カスタムセパレータを使用して複数の値として扱うことができるようにします。このようなもの:

public static void main(String[] args) {
    if (args.length == 2 && args[0].equals("--args")) {
        args = args[1].split(";;");
    }

    // Continue as normal 
}

これにより、テンプレートに以下を含めることができます。

<application-desc main-class="com.example.app.Main">
    <argument>--args</argument>
    <argument>*</argument>
</application-desc>

実際の .jnlp ファイルには、次のようなものが含まれている可能性があります。

<application-desc main-class="com.example.app.Main">
    <argument>--args</argument>
    <argument>files.txt;;29;;true;;1384212567908</argument>
</application-desc>
于 2013-11-11T23:34:09.093 に答える