如何在JNLP参数中使用变量

时间:2018-02-06 15:10:00

标签: java java-web-start jnlp java-ws

拥有以下示例jnlp:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="$$codebase" href="$$name">
    <information>
        <title>Some Example</title>
        <vendor>Some Sample Vendor</vendor>
        <homepage href="http://www.somesamplevendorhomepage.com"/>
        <description>Some Sample Description</description>
        <icon kind="splash" href="link_to_some_splash.jpg"/>
        <offline-allowed/>
    </information>
    <security>
        <all-permissions/>
    </security>
    <update check="always" policy="always"/> 
    <application-desc main-class="com.some.sample.Main">
        <argument>--URL=SAMPLE_DB_NAME=http://localhost:<db_port>/webapplication/creds/auth</argument>
        <argument>--UserTimeout=350</argument> 
    </application-desc>
    <resources>
        <j2se version="1.7+" />
        <jar href="com.some.sample_1.0.0.jar"/>
        .
        .
        .
    </resources>
</jnlp>

(请忽略格式或其他不一致之处 - 唯一重要的部分是参数部分)

参数标记中包含变量 db_port ,是否可以在使用 javaws 执行jnlp时将值传递给此变量?

例如: javaws /path/to/sample.jnlp 31022

修改

JNLP将JAR下载到AppData \ LocalLow \ Sun \ Java \ Deployment \ cache下的(位于Windows上)缓存文件夹中。 有没有办法使用下载JAR(我的应用程序有多个JAR文件),以便有办法执行应用程序直接向下载的JAR提供参数?

例如:

jar -jar app.jar --URL=SAMPLE_DB_NAME=http://localhost:<db_port>/webapplication/creds/auth

PS:我知道存储在缓存文件夹中的文件具有计算生成的名称,并且它们没有.jar扩展名。 但是,从Java控制面板GUI或带有“javaws -viewer”的CMD / PS,我能够确定用作jnlp的文件并启动它。我想知道是否有办法使用一些JAR来启动应用程序,或者可能创建一个“父”,以便能够将参数传递给它。

1 个答案:

答案 0 :(得分:0)

关于此主题的文档似乎是intentionally lacking,但documentation suggests将命令行参数传递给javaws可执行文件的首选方法是‑userConfig标记。< / p>

e.g。

javaws /path/to/sample.jnlp -userConfig port 31022

文档未提供此示例。我甚至在GitHub上搜索了javaws userConfig并且只获得了handful of results,所以这似乎是一个很少使用的功能。

由于您的问题专门询问了另一个变量中包含的<port>变量,因此不是直接支持的。相反,您需要找到一种方法来使用额外的变量和一些搜索/替换主要类的<port>通配符或参数化,假设您可以访问源。如果您无法访问源代码,那么您将无法手动编写JNLP,如果它是signed file,则可能需要额外的工作。