Java:如何在java中设置类路径

我有很多jar文件要添加到我的类路径中,所以每当我编译我的java文件时,我最终会得到这样的命令:

javac -cp commons-digester-2.1/commons-digester-2.1.jar:lucene-core-3.0.3.jar:commons-logging-1.1.1/commons-logging-1.1.1.jar:commons-beanutils-core-1.7.0.jar:. CollectionIndexer.java 

我试过用:

 set CLASSPATH=commons-digester-2.1/commons-digester-2.1.jar:lucene-core-3.0.3.jar:commons-logging-1.1.1/commons-logging-1.1.1.jar:commons-beanutils-core-1.7.0.jar:. 

接着:

 javac CollectionIndexer.java 

但jar子根本没有添加:由于丢失的jar子,我得到错误…谢谢

也许你想尝试使用maven来构建你的应用程序? 它的设置非常简单,它可以消除依赖管理的所有问题。

也可以从java 6中使用classpath中的通配符: set CLASSPATH = my_libs \ *;

尝试使用export CLASSPATH=...而不是set CLASSPATH=...

(我假设您使用的是某些描述的Unix框,给定了类路径中的冒号。)

在我看来,最无痛的方法是创建包含所有项目相关jar的批处理文件…一个要编译,另一个要运行: –

的compile.bat

 javac -cp commons-digester-2.1/commons-digester-2.1.jar:lucene-core-3.0.3.jar:commons-logging-1.1.1/commons-logging-1.1.1.jar:commons-beanutils-core-1.7.0.jar:. %1 

的run.bat

 java -cp commons-digester-2.1/commons-digester-2.1.jar:lucene-core-3.0.3.jar:commons-logging-1.1.1/commons-logging-1.1.1.jar:commons-beanutils-core-1.7.0.jar:. %1 

有了它,你可以这样做: –

 compile.bat CollectionIndexer.java run.bat CollectionIndexer 

更好的是,你可以将它们组合在一起: –

compilerun.bat

确保将“.java”附加到javac的%1

 javac -cp commons-digester-2.1/commons-digester-2.1.jar:lucene-core-3.0.3.jar:commons-logging-1.1.1/commons-logging-1.1.1.jar:commons-beanutils-core-1.7.0.jar:. %1.java java -cp commons-digester-2.1/commons-digester-2.1.jar:lucene-core-3.0.3.jar:commons-logging-1.1.1/commons-logging-1.1.1.jar:commons-beanutils-core-1.7.0.jar:. %1 

有了它,你可以这样做: –

 compilerun.bat CollectionIndexer 

我比设置classpath更喜欢这种方法,因为每次打开终端时我都不需要重新键入类路径。 🙂

顺便说一句,修改CLASSPATH环境变量专门用于编译项目并不是很好,因为在此之后,所有其他项目将inheritance此更改。 这当然只有在全球范围内改变它时才会有效。 如果您不是,而是计划编写一个小脚本来构建项目,为什么不考虑使用ant ? 祝你好运!

您已设置CLASSPATH,但未将其放入环境中。 所以这是一个变量,但不是一个环境变量。

要将脚本/会话内变量提升为环境变量,请使用命令export like

 export CLASSPATH 

这将变量提升为环境变量(任何inheritance环境的shell都可以访问)。

有些系统允许组合和导出。 在这样的系统中,您可以将set命令与export命令组合使用,如下所示:

 export CLASSPATH= 

java命令只读取环境变量CLASSPATH。 它不能查看非环境变量,因为它们不是从过程到过程inheritance的。

除了导出UNIX环境外,还要使用绝对路径。 例如,类路径条目:commons-digester-2.1 / commons-digester-2.1.jar只有在commons-digester-2.1安装目录的父目录中才有效。

在unix上,应该有一个安装软件包的公共位置。 像/ usr / local,/ usr / lib或/ usr / local / lib这样的东西。