我正在研究如何从命令行编译java。这就是我所拥有的:
这就是我所拥有的:
/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"); } }
我正在使用javac -d bin -sourcepath -src src/a_pack/HelloWorld.java
进行编译
这很好用。
现在我的理解是,因为HelloWorld.java引用了它的import语句中的其他包,然后javac去编译它们。 而且我猜测对于所有的java软件包,javac都在内部或其他东西。
无论如何 - 如果我将以下导入行添加到HelloWorld.java
import java.nio.file.Files
;
它以
失败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
这里的故事是什么?为什么有些java包很好而有些却没有?
答案 0 :(得分:15)
Java NIO。早期版本的JDK编译器将对包含这些NIO类的任何代码进行监视。您需要升级到JDK 7或更高版本。
答案 1 :(得分:3)
如果您使用的是OSX,请检查它正在使用的JDK ......
$ cd /System/Library/Frameworks/JavaVM.framework/Versions
$ readlink /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
$ javac -version
javac 1.7.0_25
正如您所看到的,CurrentJDK
指的是错误的版本。
你可以通过替换符号链接来解决这个问题。
cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo ln -fs /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents CurrentJDK
积分转到this blog post,这为我节省了5分钟dtrace
。
答案 2 :(得分:1)
我遇到了这个问题,发现我的JAVA_HOME
环境变量仍然指向旧的java 1.6。
javac -version
显示1.7 java -version
显示1.7 等...
在删除该环境变量时,事情编译得很好。
答案 3 :(得分:0)
Files类只包含静态方法。我不确定这是不是为什么不能导入它,但它确实意味着它不需要导入。
编辑:刚刚意识到你指定的包是import java.nio.files.Files。实际的包是java.nio.file.Files; http://docs.oracle.com/javase/7/docs/api/java/nio/file/package-summary.html