当其他包中有Java文件时,如何编译多个Java文件?
我正在编译目录中的多个文件(),但是当我尝试执行此操作时,我遇到了问题。javac *.java
我收到编译错误,说找不到对象的符号。javac
我有多个包,其中包含运行主程序所需的Java文件。但似乎试图逐个编译这些是行不通的。它在我的IDE中运行良好,但我有兴趣学习如何通过命令提示符完成它。
主程序位于驱动程序文件夹中。我尝试过按依赖顺序编译文件,但这并没有成功。
我正在编译目录中的多个文件(),但是当我尝试执行此操作时,我遇到了问题。javac *.java
我收到编译错误,说找不到对象的符号。javac
我有多个包,其中包含运行主程序所需的Java文件。但似乎试图逐个编译这些是行不通的。它在我的IDE中运行良好,但我有兴趣学习如何通过命令提示符完成它。
主程序位于驱动程序文件夹中。我尝试过按依赖顺序编译文件,但这并没有成功。
Javac 文档提供了所有必要的信息。但是,使用 Ant 或 Maven 进行命令行构建可能很有用。
本页提供了一个很好的例子,说明首先使用javac,然后使用Ant来构建一个简单的项目。
这是一个示例项目,以及如何用javac编译它。
该项目的树结构是这样的:
.
├── build
└── src
├── attacks
├── drivers
│ └── Driver.java
└── exceptions
└── MyException.java
有两个特殊的目录 - 用于包含编译的类和包含源文件(可能位于不同的子目录中 - 包)。build
src
以下命令编译整个项目,并将结果放入目录中。build
javac -sourcepath src -d build src/**/*.java
将目录指定为编译器可以找到所有源的位置。这些选项告诉编译器放置已编译文件的位置。-sourcepath src
src
-d build
Option 告诉编译器实际编译哪些文件。在这种特定情况下,它告诉javac向下查看两个级别,并在该级别选择所有*.java。src/**/*.java
如果存在不同级别的文件,则需要指定文件列表。为此,可以将此类列表创建为外部文件,并将此文件作为 输入选项传递。*.java
javac
以下是在Linux / Unix下如何做到这一点:
find -name "*.java" > source.txt
上述命令创建文件源.txt其中包含找到的 *.java 文件的完整路径。对于此示例,它包含:
./src/drivers/Driver.java
./src/exceptions/MyException.java
为了编译将源文件列表刷新到 的项目,可以使用以下命令:source.txt
javac -d build @source.txt
请注意,在末尾指定,告诉编译器在何处查找源文件列表。另请注意,该选项可以省略。@source.txt
-sourcepath
以下是运行上述命令后目录结构如何更改。
.
├── build
│ ├── drivers
│ │ └── Driver.class
│ └── exceptions
│ └── MyException.class
└── src
├── attacks
├── drivers
│ └── Driver.java
└── exceptions
└── MyException.java
可以看出,该目录现在包含各个包中已编译的类文件。build
而且,如果要运行它,例如,假设具有 方法 ,以下命令将执行该程序。Driver
main
java -cp .:build:**/*.class drivers.Driver
请注意,文件分隔符(冒号)在Unix下使用,对于Windows,请将其更改为(分号)。:
;
我正在编译一个目录中的多个文件(javac *.java)
已经错了。只有当 Java 类不在包中时,这才能正常工作。执行此操作的正确方法如下,其中是所有软件包目录都植根的目录的名称:src
cd src
javac package1/package2/*.java
javac package3/package4/package5/*.java
等,无论您的软件包/目录布局是什么。每个命令行将编译命名目录中的所有文件以及它所依赖的其他包/目录中的所有.java文件,这些文件尚未编译或已过期。javac
请参阅 的工具文档。javac