Java的:编译和命令行运行多个包(Java: Compiling and running mult

2019-10-18 15:33发布

我创建多个包,并想编译和运行它们。 我摆弄周围javacjava ,并了解项目如何包应该被命名为和应该如何构建。 我希望我没事。 但我失败在编译和运行的东西。 我知道我可以使用一个IDE这一点,但我想用命令行工具只为好奇,跃跃欲试。 这里是我的项目是如何组织的:

Project
  + src
    + net
      + chris
        + dojo
            - Program.java
          + datastructures
            - Queue.java
            - LinkedList.java
          + sorting
            - MergeSort.java
  + bin
    + net
      + chris
        + dojo
            - Program.class (should be here but missing because compilation fails)
          + datastructures
            - Queue.class
            - LinkedList.class
          + sorting
            - MergeSort.class

在“数据结构”和“排序”包编译的类工作正常。 下面是我使用的命令。 在“bin”文件夹的文件夹结构是由编译器自动创建。

javac -d bin src\net\chris\dojo\datastructures\*.java
javac -d bin src\net\chris\dojo\sorting\*.java

问题是,当我尝试编译“Program.java”(这就是测试类我在命令行中运行)编译器引发错误,因为它无法找到包“net.chris.dojo.datastructures”和“网.chris.dojo.sorting”。 以下是编译命令:

javac -d bin src\net\chris\dojo\Program.java

这是输出我得到:

src\net\chris\dojo\Program.java:3: error: cannot find symbol
import net.chris.dojo.datastructures;
                     ^
symbol:   class datastructures
location: package net.chris.dojo
src\net\chris\dojo\Program.java:4: error: cannot find symbol
import net.chris.dojo.sorting;
                     ^
symbol:   class sorting
location: package net.chris.dojo
src\net\chris\dojo\Program.java:11: error: cannot find symbol
            MergeSort.sort(values);
            ^
symbol:   variable MergeSort
location: class Program
src\net\chris\dojo\Program.java:12: error: cannot find symbol
            Queue queue = new Queue();
            ^
symbol:   class Queue
location: class Program
src\net\chris\dojo\Program.java:12: error: cannot find symbol
            Queue queue = new Queue();
                              ^
symbol:   class Queue
location: class Program
src\net\chris\dojo\Program.java:13: error: cannot find symbol
            LinkedList list = new LinkedList();
            ^
symbol:   class LinkedList
location: class Program
src\net\chris\dojo\Program.java:13: error: cannot find symbol
            LinkedList list = new LinkedList();
                                  ^
symbol:   class LinkedList
location: class Program
7 errors

那是我的类文件的代码:

Queue.java

package net.chris.dojo.datastructures;

public class Queue {
    ...
}

LinkedList.java

package net.chris.dojo.datastructures;

public class LinkedList {
    ...
}

MergeSort.java

package net.chris.dojo.sorting;

public class MergeSort {
    ...
}

Program.java

package net.chris.dojo;

import net.chris.dojo.datastructures;
import net.chris.dojo.sorting;

public class Program {

    public static void main(String[] args) {
        int[] values = { 9, 4, 6, 2, 0, 3, 8, 1, 7, 5 };
        MergeSort.sort(values);
        Queue queue = new Queue();
        LinkedList list = new LinkedList();
    }

}

我会用这个命令运行它:

java -cp bin net.chris.dojo.Program

我在该项目的根文件夹执行所有指令。 谢谢你的帮助。

Answer 1:

解决的办法是在编译时包括的类路径。 这样,就可以找到包这取决于。

javac -d bin -cp bin src\net\chris\dojo\Program.java

感谢@BigMike的解决方案。



Answer 2:

尝试在你的程序类更改此

import net.chris.dojo.datastructures;
import net.chris.dojo.sorting;

import net.chris.dojo.datastructures.*;
import net.chris.dojo.sorting.*;

当您编译Program.java使用下面的命令

javac -d bin src\net\chris\dojo\Program.java -classpath bin


文章来源: Java: Compiling and running multiple packages from the command-line