java中的类路径究竟是什么?

时间:2014-03-08 05:23:24

标签: java classpath

我写了一个完全适用于我的笔记本电脑的程序,但我真的希望它可以在我拥有的服务器上运行。 使用NetBeans ,我已经清理并构建了项目。我在我的服务器上复制了文件夹dist的内容,但似乎无法使用命令

开始工作
  

java -jar nameOfFile.jar

我收到错误

java.lang.NoClassDefFoundError: org/....

我一直在做一些阅读,从我收集的内容来看,我需要详细说明我使用的库所在的位置。他们位于一个名为lib的子文件夹中。

问题:

那么我需要做些什么才能运行我的jar?

6 个答案:

答案 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。”