如何使用命令行工具创建可与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)
知道我做错了什么吗?我应该在哪里看下一个?
答案 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
捆绑包引起的。确保正确引用了捆绑包并且它具有正确的清单。