Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在linux中添加类路径_Java_Linux_Classpath - Fatal编程技术网

Java 在linux中添加类路径

Java 在linux中添加类路径,java,linux,classpath,Java,Linux,Classpath,上面关于在linux中将类路径设置为现有类路径的语句是否正确除非有充分的理由,否则建议永远不要破坏现有类路径 下一行保留现有的类路径并添加到其中 export CLASSPATH=.;../somejar.jar;../mysql-connector-java-5.1.6-bin.jar java -Xmx500m folder.subfolder../dit1/some.xml cd .. linux下的路径由冒号(:)分隔,而不是分号(;),正如Theatherus在他的示例中正确使用的那

上面关于在linux中将类路径设置为现有类路径的语句是否正确

除非有充分的理由,否则建议永远不要破坏现有类路径

下一行保留现有的类路径并添加到其中

export CLASSPATH=.;../somejar.jar;../mysql-connector-java-5.1.6-bin.jar
java -Xmx500m folder.subfolder../dit1/some.xml
cd ..

linux下的路径由冒号(
)分隔,而不是分号(
),正如Theatherus在他的示例中正确使用的那样。我相信Java尊重这一惯例

编辑 除此之外,您还可以使用以下表单(在命令执行期间设置类路径):


以您更方便的为准。

我不喜欢设置类路径。CLASSPATH是一个全局变量,因此它是邪恶的:

  • 如果您在一个脚本中修改它,一些java程序会突然停止工作
  • 如果你把你运行的所有东西的库放在那里,它就会变得杂乱无章
  • 如果两个不同的应用程序使用同一库的不同版本,则会发生冲突
  • 由于类路径中的库不是共享的,只是它们的名称是共享的,因此没有性能增益
  • 如果你把点(.)或任何其他相对路径放在类路径中,这意味着每个地方都有不同的东西——这肯定会引起混乱
因此,首选的方法是为每次jvm运行设置类路径,例如:

CLASSPATH=".:../somejar.jar:../mysql-connector-java-5.1.6-bin.jar" java -Xmx500m ...
export CLASSPATH=${CLASSPATH}:/new/path

如果它变长,标准过程是将其包装在bash或批处理脚本中以保存键入

在Windows和Linux中设置类路径的重要区别在于路径分隔符,在Windows中是“;”(分号),在Linux中是“:”(冒号)。另外,
%PATH%
用于表示Windows中现有PATH变量的值,而
${PATH}
用于Linux(在bash shell中)中的相同用途。以下是在Linux中设置类路径的方法:

java -Xmx500m -cp ".:../somejar.jar:../mysql-connector-java-5.1.6-bin.jar"    "folder.subfolder../dit1/some.xml
但是这样的类路径是非常棘手的,您可能想知道为什么即使设置了正确的类路径,您的程序也不能工作。注意事项:

  • -cp
    选项覆盖
    类路径
    环境变量
  • 清单文件中定义的类路径覆盖
    -cp
    类路径
    环境变量

  • 参考:.

    对于linux用户,为了总结和补充其他人在这里所说的内容,您应该知道以下几点:

  • 全局变量不是邪恶的$CLASSPATH是Java用来查看多个目录以查找脚本所需的所有不同类的专用工具(除非您使用-cp覆盖显式地告诉它)

  • 冒号(“:”)字符分隔不同的目录。只有一个$CLASSPATH,其中包含所有目录。因此,当您运行“export CLASSPATH=..”时,您希望包含当前值“$CLASSPATH”,以便附加到它。例如:

    CLASSPATH=".:../somejar.jar:../mysql-connector-java-5.1.6-bin.jar" java -Xmx500m ...
    
    export CLASSPATH=${CLASSPATH}:/new/path
    
    在上面的第一行中,您仅用一个简单的“点”开始CLASSPATH out,它是当前工作目录的路径。这样,无论何时运行java,它都会在当前工作目录(您所在的目录)中查找类。在上面的第二行,$CLASSPATH获取您之前输入的值(.)并将该路径附加到mysql目录。现在,java将查找驱动程序和类

  • 非常方便,它返回的内容应该像一个冒号分隔的列表,列出了您希望java查找运行脚本所需的所有目录

  • Tomcat不使用类路径。请在此处阅读如何处理该问题:


  • 当我使用echo$CLASSPATH命令时,除了空行之外,不会显示任何内容,这意味着CLASSPATH从未被设置过,或者已经显式取消设置。更好的建议是不要使用CLASSPATH环境变量。改为使用“-cp”,并编写包装器脚本或shell别名以保存键入。你能给我完整的cmd吗。您指定的cmd不起作用我使用的cmd export classpath=java-Xmx500m-cp“../somejar.jar:../mysql-connector-java-5.1.6-bin.jar”“folder.subfolder../dit1/some.xml扔掉导出部分!只需:java-Xmx500m-cp”../somejar.jar:../mysql-connector-java-5.1.6-bin.jar”“folder.subfolder../dit1/some.xml”“全局变量”并不是邪恶的。它们是可以继承的。您可以毫无问题地覆盖命令行“本地”版本中的设置。更重要的是,这个“全局变量”对于运行您可能通过synaptic/aptitude/apt get安装的java应用程序非常重要。要使用本地化版本吗?请使用它们。
    echo $CLASSPATH