未找到相同包中的文件

时间:2018-01-07 16:25:24

标签: java package classpath

我正在使用spring框架。 我有一个接口和一个类在同一个包中 我的界面是

package soundsystem;

public interface CompactDisc{
    void play();
}

我的班级是

package soundsystem;
import org.springframework.stereotype.*;

@Component
public class Sgtpeppers implements CompactDisc{
    private String title = "A Movie";
    private String artist = "The Movie is Being Played";

    public void play(){
        System.out.println("The CD is Played \n"+title+"\n"+artist);
    }
}

在编译时,它给了我这个错误

Sgtpeppers.java:5: error: cannot find symbol
public class Sgtpeppers implements CompactDisc{
                                   ^
symbol: class CompactDisc
1 error

接口首先编译,.class文件也存储在soundsystem包中。

我认为javac命令有问题 我使用的命令是

javac -d . -cp "spring-framework-5.0.1.RELEASE/libs/*" Sgtpeppers.java 

这是因为我改变了类路径吗?

1 个答案:

答案 0 :(得分:0)

1)作为一般规则,要编译类,请不要从特定包的目录中执行任务 而是使用应用程序源代码的根作为基础来运行javac / java命令。

遵循这个简单的规则:

2)要编译位于同一个包中的所有类,只需将包指定为“源文件”:

  

javac soundsystem / * .java

3)要根据源代码的另一个编译类(在同一个包中)编译特定的类,您不需要指定"."(表示当前目录)在类路径中,因为它是默认值

Java documentation确实表示:

  

默认类路径是当前目录。设置CLASSPATH   变量或使用-classpath命令行选项会覆盖它   默认,因此如果要在搜索中包含当前目录   路径,然后您必须在新设置中包含一个点(。)。

但是如果您使用其他值明确设置类路径,则不会使用默认值 在这里你做到了:

  

javac -d。 -cp“spring-framework-5.0.1.RELEASE / libs / *”Sgtpeppers.java

所以你应该明确添加“。”在类路径中。

从源代码根目录,它将在Windows上提供:

  

javac -d。 -cp“.; spring-framework-5.0.1.RELEASE / libs / *”   Soundsystem的/ Sgtpeppers.java

对于Unix,分隔符char为:,因此它会给出:

  

javac -d。 -cp“。:spring-framework-5.0.1.RELEASE / libs / *”   Soundsystem的/ Sgtpeppers.java