My code compiled fine with the following command:
javac -cp "../lib/*" AvroReader.java
(lib is where i put my jar files)
At run time I get a ClassNotFoundException on the following line:
DatumReader<?> dtmrdr = new GenericDatumReader();
It says it can't find org.apache.avro.generic.GenericDatumReader even though I've imported it.
Why is this happening?
23 Answers
Importing has nothing to do with loading classes or setting CLASSPATH.
Try this:
java -cp .;../lib/* Generator Using the dot '.' as the first entry in the CLASSPATH assumes that the Generator.class file exists in the directory from which you're running java, and /lib is one level up from that directory. Adjust as needed if both of these are not correct.
You should run the program including again the same cp:
java -cp "lib directory where i put all the jars" MainClassOfYourApplication After you compiled it with:
javac -cp "lib directory where i put all the jars" AvroReader.java More applied to your example:
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 6To compile and execute java file on Linux System with external jar files :
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 To compile and execute java file on Windows System with external jar files :
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 In Unix of Linux, Java Classpath contains names of the directory with colon “:” separated, On Windows Java Classpath will be semicolon “;” separated while if you defined java classpath in Manifest file those will be space separated.