我有一个用Java编写的应用程序,它使用Maven来构建。我想使用JNLP部署它。这是我的文件夹结构:
MyProject
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ ├── folder
│ │ │ │ ├── to
│ │ │ │ │ ├── my
│ │ │ │ │ │ ├── project
│ │ │ │ │ │ │ ├── ClassWithMain.java
│ │ ├── jnlp
│ │ │ ├── myjnlp.jnlp
│ │ │ ├── myjar.jar
│ │ │ ├── mymanifest.txt
│ │ │ ├── keystore
│ │ │ ├── pageToLaunchJnlp.html
├── target
│ ├── classes
│ │ ├── folder
│ │ │ ├── to
│ │ │ │ ├── my
│ │ │ │ │ ├── project
│ │ │ │ │ │ ├── ClassWithMain.class
我使用mymanifest.txt和目标文件夹中的ClassWithMain.class创建了jar,然后使用密钥库和时间戳url对其进行了签名。
除了ClassWithMain之外还有其他文件,但这是使用main方法的文件。
但是当我尝试运行jnlp文件时,我收到错误:
java.lang.ClassNotFoundException: folder.to.my.project.ClassWithMain
at java.net.URLClassLoader.findClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
这是我下面的jnlp文件。我找到了代码库属性,因为我在这个link看到了没有代码库的部署教程。我的HTML文件使用了launchWebStartApplication和createWebStartLaunchButtonEx函数,但我仍然得到了ClassNotFoundException。
我已尝试将其更改为main.java.folder.to.my.project.ClassWithMain
,但这也无效。
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0"
href="myjnlp.jnlp">
<information>
<title>My Project</title>
<description>My Project Webstart</description>
<offline-allowed/>
</information>
<security>
<sandbox/>
</security>
<resources>
<j2se href="http://java.sun.com/products/autodl/j2se" version="1.6+" initial-heap-size="512m"
max-heap-size="512m"/>
<property name="sun.java2d.noddraw" value="true"/>
<jar href="myjar.jar" main="true"/>
</resources>
<application-desc main-class="folder.to.my.project.ClassWithMain"/>
</jnlp>
这是我的ClassWithMain根据jar tvf
命令所在的位置:
Users/myusername/MyProject/target/classes/folder/to/my/project/ClassWithMain.class
这是我的文件夹结构的问题,如果是这样,jnlp文件,jar文件,密钥库等的正确结构/位置是什么,所以正确检测主类文件?
谢谢,感谢任何帮助。
答案 0 :(得分:1)
您的文件夹结构应该是这样的 -
MyProject
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ ├── folder
│ │ │ │ ├── to
│ │ │ │ │ ├── my
│ │ │ │ │ │ ├── project
│ │ │ │ │ │ │ ├── ClassWithMain.java
resources
├── folder
│ ├── to
│ │ ├── my
│ │ │ ├── project
├── myjnlp.jnlp
├── myjar.jar
├── mymanifest.txt
├── keystore
├── pageToLaunchJnlp.html
你会得到
├── target
│ ├── classes
│ │ ├── folder
│ │ │ ├── to
│ │ │ │ ├── my
│ │ │ │ │ ├── project
│ │ │ │ │ │ ├── ClassWithMain.class
├── myjnlp.jnlp
├── mymanifest.txt
├── pageToLaunchJnlp.html
在运行时,myjnlp.jnlp将在同一位置获取ClassWithMain.class。 是的,我怀疑你的jar位置它不应该是你在哪里展示,第二个想到keystore,为什么你需要继续构建?如果你需要它应该移动到你的构建的meta-inf。