我已经成功创建了一个在我的开发计算机上运行良好的 Java 程序,包括 Netbeans 和 .jar 文件(双击)。问题是它不会在没有 JDK 或没有通过命令行启动的计算机上启动java -jar jarfile.jar
(请注意,它不会在没有-jar
标志的情况下启动)。
在开发计算机上,jar 文件都不会在没有-jar
命令行标志的情况下运行。
在程序无法启动的所有情况下,我遇到的错误如下。
S:\Folder>Program.jar
Exception in thread "main" java.lang.NoClassDefFoundError: S:\Folder\Program/jar
Caused by: java.lang.ClassNotFoundException: S:\Folder\Program.jar
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: S:\Folder\Program.jar. Program will exit.
的文件结构Program.jar
看起来是这样的:
Program.jar
binlib
build.xml
manifest.mf
onejar.mf
one-jar-ant-task.xml
com
simontuffs
onejar
a lot of classes related to OneJar
doc
one-jar-license.txt
lib
itextpdf-5.3.3.jar
main
main.jar
my
package
all the classes related to my program
META-INF
manifest.mf
Resources
all my programs resources
txt
more resources
META-INF
MANIFEST.MF
.version
OneJar.class
该项目使用Netbeans 和 OneJar进行编译,以在同一个 jar 文件中获取所有必需的库(在本例中为 iText)以帮助用户 - 只有一个文件比两个文件更容易。
jar 文件根目录下的文件夹中的文件包含以下内容MANIFEST.MF
:META-INF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: One-Jar 0.97 Ant taskdef
Main-Class: com.simontuffs.onejar.Boot
One-Jar-Main-Class: my.package.MainClass
Class-Path: lib/itextpdf-5.3.3.jar
请注意,这是由 OneJar 自动生成的,所以我认为这是正确的,尽管主类的真实路径也包含/main/main.jar/
该路径是否与根相关。
内部MANIFEST.MF
jar 文件(实际程序)中的 为空。文件夹中的一个binlib
包含以下内容:
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
Main-Class: my.package.MainClass
如何让 jar 运行?