classpath - 从命令行运行java程序

时间:2012-07-13 00:01:31

标签: java jar classpath classnotfoundexception

使用以下命令编译我的代码:

javac -cp "../lib/*" AvroReader.java

(lib是我放置jar文件的地方)

在运行时,我在以下行获得ClassNotFoundException

DatumReader<?> dtmrdr = new GenericDatumReader();

它表示即使我已导入它也无法找到org.apache.avro.generic.GenericDatumReader

为什么会这样?

谢谢!

3 个答案:

答案 0 :(得分:11)

导入与加载类或设置CLASSPATH无关。

试试这个:

java -cp .;../lib/* Generator

使用点'.'作为CLASSPATH中的第一个条目假定Generator.class文件存在于运行java的目录中,并且/lib是一级的那个目录。如果两者都不正确,请根据需要进行调整。

答案 1 :(得分:8)

你应该再次运行程序包括相同的cp:

java -cp "lib directory where i put all the jars" MainClassOfYourApplication

用以下代码编译后:

javac -cp "lib directory where i put all the jars" AvroReader.java

更多适用于您的示例:

First step(compile all the needed java files): javac -cp "path/to/jars/*" AvroReader.java //here you should include all the java files not yet compiled but which you need to run your app
Second step: java -cp "path/to/jars/*" package.subpackage1.subpackage2.Generator

答案 2 :(得分:0)

要使用外部jar文件在Linux系统上编译并执行Java文件:

  • javac -cp jar_file1.jar:jar_file2:jar_file3.jar:。 java_program_name.java

  • java -cp new_mail_api.jar:activation.jar:additional.jar:.java_program_name

要使用外部jar文件在Windows系统上编译并执行Java文件:

  • javac -cp jar_file1.jar; jar_file2; jar_file3.jar;。 java_program_name.java

  • java -cp new_mail_api.jar; activation.jar; additional.jar; .java_program_name

Rem。 :

  • 在Linux的Unix中,Java类路径包含以冒号“:”分隔的目录名称,在Windows上,Java类路径为分号“;”。分隔,而如果您在清单文件中定义了Java类路径,则这些分隔将以空格分隔。

有关Classpath的更多信息,请访问:

https://javarevisited.blogspot.com/2011/01/how-classpath-work-in-java.html

相关问题