I'm working out how to compile java from command line at the moment. Here's what I've got:
Here's what I've got:
/myjava/compile.cmd /myjava/src/a_pack/HelloWorld.java /myjava/src/b_pack/Inner.java /myjava/src/b_pack/Inner2.java /myjava/bin
HelloWorld:
package a_pack; import b_pack.Inner; import b_back.Inner2; import java.util.ArrayList; import java.util.Iterator; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); Inner myInner = new Inner(); myInner.myInner(); Inner2 myInner2 = new Inner2(); myInner2.myInner(); ArrayList myArray = new ArrayList(); myArray.add(1); myArray.add(2); myArray.add(3); Iterator itr = myArray.iterator(); while (itr.hasNext()) { System.out.println(itr.next()); } } }
Inner.java
package b_pack; public class Inner { public void myInner() { System.out.println("Inner Method"); } }
Inner2.java
package b_pack; public class Inner2 { public void myInner() { System.out.println("SecondInner"); } }
I'm compiling this with javac -d bin -sourcepath -src src/a_pack/HelloWorld.java
and this works fine.
Now my understanding is, that because the HelloWorld.java references the other packages in it's import statements, then javac goes and compiles those. And I'm guessing that for all the java packages, javac has them internally or something.
Anyway - if I add the following import line to HelloWorld.java
import java.nio.file.Files
;
it fails with
D:\.....\myjava>javac -d bin -sourcepath src src/a_pack/HelloWo rld.java src\a_pack\HelloWorld.java:8: package java.nio.file does not exist import java.nio.file.Files; ^ 1 error
What's the story here? Why are some java packages good and some not?
I came across this issue and found my
JAVA_HOME
environment variable was still pointing to the old java 1.6.javac -version
showed 1.7java -version
showed 1.7etc…
On removing that environment variable, things compiled fine.
The Files class consists of only static methods. I'm not sure if this is why it can't be imported, but it does mean it doesn't need to be imported.
Edit: Just realized the package you specified is import java.nio.files.Files. The actual package is java.nio.file.Files; http://docs.oracle.com/javase/7/docs/api/java/nio/file/package-summary.html
Java NIO was introduced in Java 7. Compilers from earlier versions of the JDK will baulk at any code that contains these NIO classes. You need to upgrade to JDK 7 or higher.
If you are on OSX, then check the JDK it is using...
As you can see
CurrentJDK
is pointing to the wrong version. You can fix that by replacing the symlink.Credit goes to this blog post which saved me 5min of running
dtrace
.