使用以下命令编译我的代码:
javac -cp "../lib/*" AvroReader.java
(lib是我放置jar文件的地方)
在运行时,我在以下行获得ClassNotFoundException
:
DatumReader<?> dtmrdr = new GenericDatumReader();
它表示即使我已导入它也无法找到org.apache.avro.generic.GenericDatumReader
。
为什么会这样?
谢谢!
答案 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。 :
有关Classpath的更多信息,请访问:
https://javarevisited.blogspot.com/2011/01/how-classpath-work-in-java.html