3

我们使用 JNLP 将 Swing 应用程序部署到所有用户。使用 JNLP,您必须引用任何 JAR 依赖项的特定名称/版本,例如widget-lib-1.4.7.jar.

我们刚刚介绍了一个将编译为可重用 JAR 的新项目,但它会迅速变化(每隔几天左右),因此版本号会经常变化。一旦完成,我们的 Swing 应用程序将依赖于这个新项目。

除非我们改变我们的设置,否则每次我们发布这个新依赖的新版本时,我们都必须更新 JNLP 并重新发布它,就像我说的那样,这将非常频繁。

有没有办法从 JNLP 内部调用 Ivy,或者以某种方式告诉 JNLP 包含目录的内容(然后有一个单独的进程始终确保 JAR 的最新版本在该目录中),或者我们可以做些什么,这样我们就不必不断地改变 JNLP?

提前致谢!

4

2 回答 2

1

如果您的 JNLP 经常更新(或需要任何其他每个用户的参数,例如上传密钥),请不要使用静态文件。相反,使用 JSP、Velocity、Freemarker 或类似的模板引擎创建模板 JNLP 文件,并动态填写 JNLP 的字段,例如从数据库中。

于 2013-08-29T16:41:08.140 回答
1

我不确定这是否满足您的需求,但您可以为经常更改的库使用第二个 .jnlp。您的主应用程序的 .jnlp 将使用一个<extension>元素引用该 .jnlp。

您的主应用程序的 .jnlp 将包含以下内容:

    <resources>
        <j2se version="1.7+"/>
        <jar href="MyApp.jar" main="true"/>
        <extension name="WidgetLib" href="WidgetLib.jnlp"/>
    </resources>

WidgetLib.jnlp 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp href="WidgetLib.jnlp"
      version="1.4.7"
      codebase="http://www.company.com/myapp/">

    <information>
        <title>Widget Library</title>
        <vendor>My Company</vendor>
        <description>Latest version of Widget Library</description>
        <offline-allowed/>
    </information>

    <security>
        <all-permissions/>
    </security>

    <resources>
        <jar href="widget-lib-1.4.7.jar"/>
    </resources>

    <component-desc/>
</jnlp>
于 2013-08-30T22:52:43.327 回答