管理不断变化的JNLP依赖关系?

时间:2013-08-29 16:23:30

标签: java ivy jnlp dependency-management

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

我们刚刚推出了一个新项目,它将作为一个可重用的JAR进行编译,但是这个项目将会快速变化(每隔几天左右),因此版本号会经常变化。我们的Swing应用程序将在完成后依赖于这个新项目。

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

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

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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>