使用命令行JAVAC编译Java

我对使用cmd line javac进行编译有点新,我在编译这个简单的Base-Interface类时遇到了问题

package com.apress.prospring2.ch03.di; /** * @author janm */ public interface Encyclopedia { Long findLong(String entry); } 

 package com.apress.prospring2.ch03.di; import java.util.Map; import java.util.HashMap; /** * @author janm */ public class HardcodedEncyclopedia implements Encyclopedia { private Map entryValues = new HashMap(); public HardcodedEncyclopedia() { this.entryValues.put("AgeOfUniverse", 13700000000L); this.entryValues.put("ConstantOfLife", 326190476L); } public Long findLong(String entry) { return this.entryValues.get(entry); } } 

我可以使用javac Encyclopedia.java轻松编译Encyclopedia但是当我尝试编译HardcodedEncyclopedia .java时,我得到了

 HardcodedEncyclopedia.java:9: cannot find symbol symbol: class Encyclopedia public class HardcodedEncyclopedia implements Encyclopedia { ^ 1 error 

有人可以告诉我如何在不使用Ant或Maven的情况下解决这个问题吗? 谢谢 :)

您需要从包的顶层编译类,因此在这种情况下,您需要位于“com”所在的目录中。

然后你可以编译:

 javac -cp . com/apress/prospring2/ch03/di/*.java 

我怀疑您正在尝试从com/apress/prospring2/ch03/di目录中编译com/apress/prospring2/ch03/di 。 即使Encyclopedia.java位于同一目录中,javac也需要知道如何找到它所期望的om.apress.prospring2.ch03.di包。您可以像这样指定类路径:

 javac -cp ../../../../.. HardcodedEncyclopedia.java 

或者您可以转到根目录以将类路径暗示为当前目录,如下所示:

 cd ../../../../.. javac com/apress/prospring2/ch03/di/HardcodedEncyclopedia.java 

尝试:

 javac Bar.java Foo.java 

这是考虑他们在同一个包中