使用javac和java在其他目录下执行带有外部类的类文件

使用javac和java在其他目录下执行带有外部类的类文件,java,javac,Java,Javac,我尝试使用javac编译我的javafilejavac Main.java-cp./lib HelloWorld.java,我得到了这个javac:file not found:HelloWorld.java 这是我的java源文件: 下的Main.java/ import lib.*; public class Main { public static void main (String []args) { H

我尝试使用javac编译我的javafile
javac Main.java-cp./lib HelloWorld.java
,我得到了这个
javac:file not found:HelloWorld.java
这是我的java源文件: 下的Main.java/

    import lib.*;

    public class Main 
    {
        public static void main (String []args)
        {
            HelloWorld hw = new HelloWorld ();
            System.out.println (hw.getMsg ());
        }
    }
和./lib下的HelloWorld.java

package lib;

public class HelloWorld
{
    public String getMsg ()
    {
        return "HelloWorld!";
    }
}
任何帮助都将不胜感激

您的命令应该是

javac Main.java lib/HelloWorld.java
您的尝试失败有以下几个原因:

  • -cp lib
    (如果需要)应位于源代码路径名之前
  • 类路径不用于查找源文件;它用于查找已编译的文件
在这种情况下,将类路径设置为
/lib
是错误的,原因还有另一个。目录
lib
实际上对应于
HelloWorld
类的包名。如果类路径是
/lib
,那么
java
javac
将在中查找
HelloWorld.java
的编译版本

   ./lib/lib/HelloWorld.class

是的,您要求它编译
HelloWorld.java
,而不是
lib/HelloWorld.java
。文件
HelloWorld.java
(相对于当前工作目录)不存在…请使用指定的正确路径:
/lib/HelloWorld.java
不带空格谢谢大家!我终于执行了主课。非常感谢!我误解了
-cp
的意思。谢谢你的时间和耐心!!为了澄清第二个要点(完全正确),它用于查找代码导入的编译文件,编译器需要查看这些文件以确保正确使用API。我可能说得很糟糕,但你明白了。