编译java代码无法找到源文件

时间:2016-10-15 21:32:34

标签: java javac

我正在遵循Oracle Java SE 8考试准备的练习1.2,该练习指示我构建一个主类GreetingsUniverse和三个将由主类初始化的类; MarsEarthVenus

我将com目录存储在位置:C:\Users\Chris\Documents\JavaMM

package com.ocajexam.tutorial;

import com.ocajexam.tutorial.planets.Earth;
import com.ocajexam.tutorial.planets.Venus;
import com.ocajexam.tutorial.planets.Mars;

public class GreetingsUniverse
{
    public static void main (String[] args)
    {
        System.out.println("Greetings, Universe!");
        Earth e = new Earth();
        Mars m = new Mars();
        Venus v = new Venus();
    }
}
package com.ocajexam.tutorial.planets;

public class Mars
{
    public Mars()
    {
        System.out.println("Hello from Mars!");
    }
}
package com.ocajexam.tutorial.planets;

public class Earth
{
    public Earth()
    {
        System.out.println("Hello from Earth!");
    }
}
package com.ocajexam.tutorial.planets;

public class Venus
{
    public Venus()
    {
        System.out.println("Hello from Venus!");
    }
}

练习目的是确定编译代码所需的命令行参数。

我将GreetingsUniverse java文件存储在com\ocajexam\tutorial\中,行星存储在com\ocajexam\tutorial\planets

我尝试了各种解决方案但没有成功:

javac -d . -cp com\ocajexam\tutorial\planets com\ocajexam\tutorial\GreetingsUniverse.java

javac -d . -cp com com\ocajexam\tutorial\GreetingsUniverse.java

我一直收到以下错误:

C:\Users\Chris\Documents\JavaMM>javac -d . -cp com com\ocajexam\tutorial\GreetingsUniverse.java
com\ocajexam\tutorial\GreetingsUniverse.java:8: error: cannot find symbol
                Earth e = new Earth();
                ^
  symbol:   class Earth
  location: class GreetingsUniverse
com\ocajexam\tutorial\GreetingsUniverse.java:8: error: cannot find symbol
                Earth e = new Earth();
                              ^
  symbol:   class Earth
  location: class GreetingsUniverse
com\ocajexam\tutorial\GreetingsUniverse.java:9: error: cannot find symbol
                Mars m = new Mars();
                ^
  symbol:   class Mars
  location: class GreetingsUniverse
com\ocajexam\tutorial\GreetingsUniverse.java:9: error: cannot find symbol
                Mars m = new Mars();
                             ^
  symbol:   class Mars
  location: class GreetingsUniverse
com\ocajexam\tutorial\GreetingsUniverse.java:10: error: cannot find symbol
                Venus v = new Venus();
                ^
  symbol:   class Venus
  location: class GreetingsUniverse
com\ocajexam\tutorial\GreetingsUniverse.java:10: error: cannot find symbol
                Venus v = new Venus();
                              ^
  symbol:   class Venus
  location: class GreetingsUniverse
6 errors

有谁知道我在哪里出错?

我还尝试了以下产生不同错误消息:

C:\Users\Chris\Documents\JavaMM>javac -d . com\ocajexam\tutorial\planets\Earth.java;com\ocajexam\tutorial\planets\Mars.java;com\ocajexam\tutorial\planets\Venus.java com\ocajexam\tutorial\GreetingsUniverse.java

产生此错误:

javac: file not found: com\ocajexam\tutorial\planets\Earth.java;com\ocajexam\tutorial\planets\Mars.java;com\ocajexam\tutorial\planets\Venus.java
Usage: javac <options> <source files>
use -help for a list of possible options

文件肯定存在,如果我在planets目录上,我可以在那里看到它们:

 Directory of C:\Users\Chris\Documents\JavaMM\com\ocajexam\tutorial\planets

16/10/2016  11:33    <DIR>          .
16/10/2016  11:33    <DIR>          ..
15/10/2016  21:48               135 Earth.java
15/10/2016  21:48               132 Mars.java
15/10/2016  21:48               135 Venus.java

更新: 经过进一步调试后,这变得越来越陌生......

我正在尝试使用命令的前半部分仅编译行星文件:

javac -d . -cp com\ocajexam\tutorial\planets\*.java

当我检查行星目录时,只编译了两个行星。当我删除没有编译的java类时,只编译了一个文件!

当我使用相同的命令指定我要编译的java文件时:

javac -d . -cp com\ocajexam\tutorial\planets\Venus.java

我收到以下错误:

javac: no source files
Usage: javac <options> <source files>
use -help for a list of possible options

我无法理解这一点,因为Venus.java是我运行/*.java编译命令以检测目录中的任何java文件时编译的文件之一

3 个答案:

答案 0 :(得分:0)

您需要先编译所有类。 javac 仅编译您的主类。使用javac -cp /path/to/file/*.java。星号(*.java)表示编译文件夹中的所有java类。

答案 1 :(得分:0)

《 OCA Java SE 8程序员I学习指南》中的示例使用不带括号的构造函数。

package com.ocajexam.tutorial.planets;

    public class Earth { 
        public Earth { 
            System.out.println("Hello from Earth!"); 
        } 
    }

这当然应该是

package com.ocajexam.tutorial.planets;

    public class Earth { 
        public Earth () { 
            System.out.println("Hello from Earth!"); 
        } 
    }

然后您可以运行javac com/ocajexam/tutorial/greetingsUniverse.javajava com/ocajexam/tutorial/GreetingsUniverse

尽管严格地说,这不是问题的答案(使用带括号的构造函数),但可能会帮助其他人遇到相同的错误。

答案 2 :(得分:-1)

所有使用的.java文件都需要在类路径中。即javac -d . -cp com com\ocajexam\tutorial\*.java com\ocajexam\tutorial\planets\*.java

尝试做:javac -d。 -cp com com / ocajexam / tutorial / GreetingsUniverse.java com / ocajexam / tutorial / planets / Earth.java com / ocajexam / tutorial / planets / Mars.java com / ocajexam / tutorial / planets / Venus.java