我在运行包含Eclipse IDE之外的软件包的项目时遇到了麻烦,因此我创建了一个简单的示例来说明问题。
我在Eclipse中创建了一个名为Toy的项目,以表示某种简单的玩具。 Eclipse生成的文件夹的布局为:
📦toy
┣ 📂bin
┃ ┗ 📂toy
┃ ┃ ┣ 📂toy_data
┃ ┃ ┃ ┣ 📜Colour.class
┃ ┃ ┃ ┗ 📜Phrases.class
┃ ┃ ┗ 📜Toy.class
┣ 📂src
┃ ┗ 📂toy
┃ ┃ ┣ 📂toy_data
┃ ┃ ┃ ┣ 📜Colour.java
┃ ┃ ┃ ┗ 📜Phrases.java
┃ ┃ ┗ 📜Toy.java
┣ 📜.classpath
┗ 📜.project
toy.java从Eclipse导入toy.toy_data.Colour和toy.toy_data.Phrases,我可以成功运行toy.java ...
但是,如果我进入/ toy / src / toy并尝试运行
javac Toy.java
我收到以下错误消息:
Toy.java:3: error: package toy.toy_data does not exist
import toy.toy_data.Colour;
^
Toy.java:4: error: package toy.toy_data does not exist
import toy.toy_data.Phrases;
^
Toy.java:10: error: cannot find symbol
Phrases p = new Phrases();
^
symbol: class Phrases
location: class Toy
Toy.java:10: error: cannot find symbol
Phrases p = new Phrases();
^
symbol: class Phrases
location: class Toy
Toy.java:11: error: cannot find symbol
Colour c = new Colour();
^
symbol: class Colour
location: class Toy
Toy.java:11: error: cannot find symbol
Colour c = new Colour();
^
symbol: class Colour
location: class Toy
6 errors
我已经尝试过搜索一堆,因为它似乎与类路径有关,但是我似乎无法理解它。从前两个错误看来,好像找不到我的包裹,所以我尝试了
javac -cp "/toy_data/" Toy.java
尽管这也不能解决问题。我还查看了Eclipse .classpath文件,但看起来似乎没有太大用处。
玩具
package toy;
import toy.toy_data.Colour;
import toy.toy_data.Phrases;
public class Toy
{
public static void main(String[] args)
{
Phrases p = new Phrases();
Colour c = new Colour();
c.print();
}
}
Colour.java
package toy.toy_data;
public class Colour
{
public void print()
{
System.out.println("I am the colour red!");
Phrases p = new Phrases();
p.print();
}
}
短语库
package toy.toy_data;
public class Phrases
{
public void print()
{
System.out.println("Hello there.");
}
}
最佳答案
javac需要能够计算出导入类的位置。最简单的方法是从src
目录运行javac命令并使用:
javac toy/Toy.java
请注意,这会将输出.class文件放在与源文件相同的目录中。要输出到
bin
目录,命令将是:javac -d ../bin -sourcepath . toy/Toy.java
通常,您不经常直接使用javac,要么让Eclipse进行编译,要么使用诸如maven或gradle之类的构建工具来理解所有这些内容。