export CLASSPATH=.;../somejar.jar;../mysql-connector-java-5.1.6-bin.jar
java -Xmx500m folder.subfolder../dit1/some.xml
cd ..
上面将类路径设置为linux中已经存在的类路径的语句是否正确
我不喜欢设置 CLASSPATH。CLASSPATH 是一个全局变量,因此它是邪恶的:
因此,首选方法是为每次运行 jvm 设置类路径,例如:
java -Xmx500m -cp ".:../somejar.jar:../mysql-connector-java-5.1.6-bin.jar" "folder.subfolder../dit1/some.xml
如果它变得很长,标准过程是将其包装在 bash 或批处理脚本中以节省输入。
除非您有充分的理由,否则始终建议不要破坏性地破坏现有的类路径。
以下行保留现有的类路径并添加到它上面。
export CLASSPATH="$CLASSPATH:foo.jar:../bar.jar"
在 Windows 和 Linux 中设置 Classpath 的重要区别是路径分隔符“;” Windows 中的(分号)和 Linux 中的“:”(冒号)。也%PATH%
用于表示 Windows 中现有路径变量的值,而${PATH}
在 Linux 中用于相同目的(在 bash shell 中)。这是在 Linux 中设置类路径的方法:
export CLASSPATH=${CLASSPATH}:/new/path
但因此 Classpath 非常棘手,您可能想知道为什么即使设置了正确的 Classpath,您的程序也无法运行。注意事项:
-cp
选项覆盖CLASSPATH
环境变量。-cp
和CLASSPATH
环境变量。参考:Classpath 如何在 Java中工作。
linux 下的路径由冒号 ( :
) 分隔,而不是分号 ( ;
),因为 theatrus 在他的示例中正确使用了它。我相信 Java 尊重这个约定。
作为andy 建议的替代方案,您可以使用以下形式(在命令期间设置 CLASSPATH):
CLASSPATH=".:../somejar.jar:../mysql-connector-java-5.1.6-bin.jar" java -Xmx500m ...
哪个对你更方便。
对于 linux 用户,总结和补充其他人在这里所说的内容,您应该知道以下内容:
全局变量并不邪恶。$CLASSPATH 特别是 Java 用来查看多个目录以查找脚本所需的所有不同类(除非您使用 -cp 覆盖明确告诉它)。
冒号 (":") 字符分隔不同的目录。只有一个 $CLASSPATH 并且其中包含所有目录。因此,当您运行“export CLASSPATH=....”时,您希望包含当前值“$CLASSPATH”以附加到它。例如:
export CLASSPATH=.
export CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java-5.1.12.jar
在上面的第一行中,您只使用一个简单的“点”来启动 CLASSPATH,它是您当前工作目录的路径。这样,每当您运行 java 时,它都会在当前工作目录(您所在的目录)中查找类。在上面的第二行中,$CLASSPATH 获取您之前输入的值 (.) 并将路径附加到 mysql 驱动程序。现在,java 将为您的类查找驱动程序和。
echo $CLASSPATH
非常方便,它返回的内容应该像冒号分隔的列表一样,您希望 java 查找运行脚本所需的所有目录。
Tomcat 不使用 CLASSPATH。在此处阅读如何处理:https ://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html