我在运行包含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进行编译,要么使用诸如mavengradle之类的构建工具来理解所有这些内容。

09-25 20:57