我正在使用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
这是因为我改变了类路径吗?
答案 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