我写了一个完全适用于我的笔记本电脑的程序,但我真的希望它可以在我拥有的服务器上运行。 使用NetBeans ,我已经清理并构建了项目。我在我的服务器上复制了文件夹dist的内容,但似乎无法使用命令
开始工作java -jar nameOfFile.jar
我收到错误
java.lang.NoClassDefFoundError: org/....
我一直在做一些阅读,从我收集的内容来看,我需要详细说明我使用的库所在的位置。他们位于一个名为lib的子文件夹中。
问题:
那么我需要做些什么才能运行我的jar?
答案 0 :(得分:6)
试试:
java -classpath "$CLASSPATH:nameOfFile.jar:lib/*" path.to.your.MainClass
这样做是将类路径设置为$CLASSPATH
的值,加上nameOfFile.jar,加上.jar
中的所有lib/
个文件。
答案 1 :(得分:5)
CLASSPATH是一个环境变量,可以帮助我们从Java Virtual Machine开始搜索.class文件。
我们应该将包层次结构的根存储在CLASSPATH环境变量中。
如果在我们的项目中添加或使用jar库,我们应该将jar文件的位置放在CLASSPATH环境变量中。
示例:如果我们在java项目中使用jdbc mysql jar文件,我们必须更新CLASSPATH环境变量中mysql jar文件的位置。如果我们的mysql.jar在c:\ driver \ mysql.jar中,那么
我们可以在Windows中通过DOS设置类路径
set CLASSPATH=%CLASSPATH%;c:\driver\mysql.jar
在Linux中我们可以做到
export CLASSPATH=$CLASSPATH:[path of the jar]
希望它有所帮助!
答案 2 :(得分:1)
您需要使用
设置类路径以下适用于bash。 这是暂时的
set CLASSPATH=$CLASSPATH=[put the path here for lib]
如果你想要它是永久性的,那么你可以在〜/ .bashrc文件中添加上面的行
export CLASSPATH=$CLASSPATH:[put the path here for lib]:.
答案 3 :(得分:0)
使用 META-INF / MANIFEST.MF 文件指定 Main-Class 依赖项时,也必须在manifest中指定。
-jar开关忽略所有其他类路径信息 - 有关详细信息,请参阅tools文档。
答案 4 :(得分:0)
一个编译器(例如javac
)从.java
-.class
个文件中创建,并且JVM
使用这些{ {1}}个文件。
.class
指向源根。 classpath
+ classpath
= import_path
例如MacOS
full path
Android完整路径
//full path
/Users/Application.jar/my/package/MainClass
//classpath
/Users/Application.jar
//import_path
my.package.MainClass
答案 5 :(得分:0)
您有两个问题,一个是“标题问题”,另一个是“脚注问题”。
请阅读以下文档,以更好地了解CLASSPATH。
https://docs.oracle.com/javase/tutorial/essential/environment/index.html https://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html
这是您需要的快速,直接的方法。
对于您的第一个问题,这将做到:
文档建议我们为当前正在使用的每个应用程序(在命令行中使用)设置一个类路径:
java -classpath C:\yourDirectoryPath myApp
对于第二个问题,请在Java文档中查看此练习。似乎是同一个问题:
https://docs.oracle.com/javase/tutorial/essential/environment/QandE/answers.html
问题和练习的答案:平台环境
问题1.程序员安装了一个包含在.jar文件中的新库。为了从他的代码访问该库,他将CLASSPATH环境变量设置为指向新的.jar文件。现在,他发现尝试启动简单应用程序时收到错误消息:
java Hello Exception in thread "main" java.lang.NoClassDefFoundError: Hello
在这种情况下,Hello类被编译到当前目录中的.class文件中-但是java命令似乎找不到它。怎么了?
答案1.仅当类出现在类路径中时,才会找到该类。默认情况下,类路径由当前目录组成。如果设置了CLASSPATH环境变量,并且不包含当前目录,则启动器将无法在当前目录中找到类。解决方案是将CLASSPATH变量更改为包括当前目录。例如,如果CLASSPATH值为c:\ java \ newLibrary.jar(Windows)或/home/me/newLibrary.jar(UNIX或Linux),则需要将其更改为。; c:\ java \ newLibrary.jar或。:/ home / me / newLibrary.jar。”