我编写了一个源文件并将该公共类放在一个包中:
package abc;
public class Employee
{
// Constructor
public Employee(String name, double salary)
{
this.name = name;
this.salary = salary;
}
// Methods
public String getName()
{
return this.name;
}
public double getSalary()
{
return this.salary;
}
// instance field
private String name;
private double salary;
}
然后我尝试使用命令编译它: javac Employee.java ,它在与源文件相同的目录中生成一个.class文件
现在我尝试使用这个包,所以我写了一个源文件:
import abc.*;
public class HelloWorld
{
public static void main(String args[]){
//System.out.println("hello world");
Employee aEmployee = new Employee("David",1000);
System.out.println(aEmployee.getName() + aEmployee.getSalary());
}
}
我尝试使用 javac HelloWorld.java 编译它,但它有一个错误说:包abc不存在
我有以下问题:
1)为什么会发生这种错误?
2)如何解决这个问题?
3)每次打包某些类时,我在哪里可以找到以后使用的包
我已经阅读了一些关于此问题的文档,但这很复杂,有人可以解释一下简单吗?
答案 0 :(得分:4)
1)为什么会发生这种错误?
这是因为java编译器在尝试加载包时会在类路径或jar文件中查找目录树。这意味着对于名为abc.foo.bar
的包,它将查找目录树:/abc/foo/bar
并期望属于该包的类存在。您已经编译了Employee类,但是在导入它时,编译器会在类路径中查找目录abc
,但它不存在。
2)如何解决这个问题?
您需要确保在编译Employee类时,其类文件位于类路径中的某个目录abc
中。最简单的事情可能是创建一个名为abc
的目录,然后将将Employee.java文件移动到abc
目录中,然后编译:
javac abc/Employee.java
这将在abc
目录中创建一个Employee.class文件。然后你可以编译你的HelloWorld:
javac HelloWorld.java
3)每次打包某些类时,我在哪里可以找到以后使用的包
在您为包命名的目录树中。请参阅对1)
的回复的后半部分。
答案 1 :(得分:1)
如果您正在使用类文件。 你应该让你的类文件与包相同的文件夹结构。(其实践)例如,如果" abc"是包。然后你的Employees.java应该在" abc"夹。编译后,生成的类文件将填入abc文件夹。在任何情况下,您都应确保您的类文件位于abc文件夹中。
之后,如果您尝试在另一个类中使用abc.Employees.class。您必须将abc文件夹保留在类路径中,例如 如果您的abc文件夹位于d:/ java / sources / bin / abc ..这是您拥有员工类的地方。
否则
使用-d选项编译
javac Employee.java -d d:/ java / sources / bin
set classpath = d:/ java / sources / bin /:%classpath%`。
javac HelloWorld.java
在此之后,您将能够编译代码。
答案 2 :(得分:0)
像这样试试..
javac -sourcepath /path/to/srcdir -cp /path/to/libraries -d /path/to/outputdir
查看此网站以获得更好的教程:
http://www.sergiy.ca/how-to-compile-and-launch-java-code-from-command-line/
答案 3 :(得分:0)
您需要做的一些事情:
将abc包的类文件放入名为abc的文件夹中。例如。
mkdir abc; mv Employee.class abc
请参阅以下评论/使用-d选项的其他答案。
告诉java编译器在哪里找到类文件。您可以使用-classpath选项执行此操作。如果abc
在您当前的文件夹中,那么您可以告诉javac搜索中的类文件。像这样:
javac -classpath . HelloWorld.java
回答你的第一个问题:错误发生是因为java编译器不知道在哪里查找abc包。第二个是上面的回答。这些步骤将来有助于:)。
答案 4 :(得分:0)
你应该编译喜欢这个
javac -cp d:\yourJavaProject\abc Employee.java
javac -cp d:\yourJavaProject\abc HelloWorld.java
并且运行喜欢这个;
java -cp .;d:\yourJavaProject\abc HelloWorld
请参阅reference以了解如何从命令行编译和运行Java程序包。