使用命令行工具将OSGi项目部署为Webstart

时间:2011-06-29 11:15:16

标签: command-line ant build-automation osgi java-web-start

如何使用命令行工具创建可与Java Webstart一起分发的模块化OSGi项目?

我找到了instructions to export a set of OSGi plugins from eclipse。但是在没有日食帮助的情况下这样做的说明很难找到。我想使用ant构建脚本和/或其他命令行工具来完成此任务。

这是我到目前为止所得到的。使用ant,所有插件包都将复制到目录并进行签名。之后,我创建了一个名为wrapper.jnlp

的jnlp文件
<?xml version="1.0" encoding="UTF-8"?>
<jnlp codebase="http://localhost/webstart" href="wrapper.jnlp">
    <information>
        <title>My app</title>
        <vendor>Me</vendor>
        <offline-allowed/>
    </information>
    <resources>
        <j2se version="1.5+" java-vm-args="-Xmx512M"/>
        <jar href="org.eclipse.equinox.launcher.jar"/>
        <extension name="Wrapper feature" href="myprogram.jnlp"/>
    </resources>
    <application-desc main-class="org.eclipse.equinox.launcher.WebStartMain"/>
    <security>
         <all-permissions/>
    </security>
</jnlp>

我创建了第二个名为myprogram.jnlp的jnlp文件。

<?xml version="1.0" encoding="UTF-8"?>
<jnlp codebase="http://localhost/webstart" href="myprogram.jnlp">
    <information>
        <title>My app</title>
        <offline-allowed/>
    </information>
    <resources>
         <j2se version="1.5+" java-vm-args="-Xmx512M"/>
         <jar href="myapp.jar"/>
         <jar href="derby.jar"/>
         <jar href="commons-math-2.0.jar"/>
             ...omitting a dozen more jar files...
    </resources>
    <application-desc main-class="myprogram.Main"/>
    <security>
         <all-permissions/>
    </security>
</jnlp>

当我部署并尝试启动它时(从命令行:javaws http://localhost/webstart/wrapper.jnlp),应用程序的jar文件似乎已下载。然后我在日志文件中收到以下错误:

!SESSION Wed Jun 29 13:43:52 CEST 2011 -----------------------------------------
!ENTRY org.eclipse.equinox.launcher 4 0 2011-06-29 13:43:52.448
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.NullPointerException
    at java.util.Hashtable.put(Hashtable.java:411)
    at org.eclipse.equinox.launcher.WebStartMain.basicRun(WebStartMain.java:78)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
    at org.eclipse.equinox.launcher.WebStartMain.main(WebStartMain.java:57)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at net.sourceforge.jnlp.Launcher.launchApplication(Launcher.java:590)
    at net.sourceforge.jnlp.Launcher$TgThread.run(Launcher.java:887)

知道我做错了什么吗?我应该在哪里看下一个?

4 个答案:

答案 0 :(得分:1)

我有同样的问题。我通过在我的包装器jnlp中指定以下内容来解决它:

    <resources>
        <!-- Reference to the launcher jar. The version segment must be updated to the version being used-->
        <jar href="plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar" />
        <!-- Reference to the osgi jar. The version segment must be updated to the version being used-->
        <jar href="plugins/org.eclipse.osgi_3.7.0.v20110613.jar" />

        ...

    </resources>

答案 1 :(得分:0)

我相信您可能希望切换齿轮并使用您的代码和所有依赖项创建一个P2存储库,然后让一个简单的p2-installer从那里拉出依赖项(绕过WebStart)并启动您的应用程序。

答案 2 :(得分:0)

查看此http://www.jbundle.org/osgi-webstart/“使用此servlet将OSGi应用程序部署到Web客户端。”

虽然它是文档中的maven插件,但看起来你可以在没有 maven项目的情况下运行

答案 3 :(得分:0)

根据消息来源,您的问题是由于未能在类路径上找到org.eclipse.osgi捆绑包引起的。确保正确引用了捆绑包并且它具有正确的清单。