我现在正尝试使用Java Web Start部署Java应用程序。独立运行时应用程序运行正常。我将项目导出为可运行的.jar文件,然后编写相应的jnlp文件。
但是,从jnlp文件运行时,应用程序在启动时会返回以下错误:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: someClass
........
Caused by: java.lang.ClassNotFoundException: someClass
.........
我使用Eclipse Helios导出了.jar文件,其中包含“将所需库打包到生成的JAR中”选项。
这是我的jnlp文件的样子(我替换了一些信息):
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+"
codebase="................"
href="thisJNLP.jnlp">
<information>
<title>Whatever</title>
<vendor>Whatever</vendor>
</information>
<security>
<all-permissions/>
</security>
<resources>
<!-- Application Resources -->
<j2se version="1.6+"
href="http://java.sun.com/products/autodl/j2se"/>
<jar href="signed.jar" main="true" />
</resources>
<application-desc
name="Whatever"
main-class="thisProject.main"
width="300"
height="300">
</application-desc>
<update check="background"/>
</jnlp>
此外,我使用WebLogic 10来托管文件,但我怀疑这会有什么不同。
有人可以帮助我吗?
感谢您的任何意见!
答案 0 :(得分:1)
必须从JNLP文件的resources部分中指定的JAR文件中检索所有应用程序资源,或者使用对Web服务器的HTTP请求显式检索所有应用程序资源。建议在JAR文件中存储资源,因为它们将由Java Web Start缓存在本地计算机上。
因此,类加载器机制对于WebStart应用程序是不同的。我认为这是打包选项“将所需的库打包到生成的JAR中”会导致问题。
类someClass
包含在signed.jar
文件中的jar中吗?如果是这样,这将支持这个理论 - 尝试生成单独的jar文件(不要忘记全部签名!)并在<resources>
部分中将它们作为单独的<jar>
条目引用。