gpt4 book ai didi

java - 当其他包中有Java文件时,如何编译多个Java文件?

转载 作者:太空狗 更新时间:2023-10-29 22:45:06 25 4
gpt4 key购买 nike

我正在一个目录 (javac *.java) 中编译多个文件,但是当我尝试这样做时遇到了问题。

我收到编译错误,提示 javac 找不到对象的符号。

我有多个包,其中包含运行主程序所需的 Java 文件。但似乎试图将这些逐一编译是行不通的。它在我的 IDE 中运行良好,但我有兴趣了解它是如何通过命令提示符完成的。

主程序在驱动程序文件夹中。我试过按依赖顺序编译文件,但没有成功。

this is a screenshot of the folders

最佳答案

Javac documentation提供所有必要的信息。但是,使用 Ant 或 Maven 进行命令行构建可能很有用。

This页面提供了一个很好的例子,先使用 javac,然后使用 Ant 来构建一个简单的项目。


这是一个示例项目,以及如何使用 javac 对其进行编译。

项目的树状结构是这样的:

   .
├── build
└── src
├── attacks
├── drivers
│   └── Driver.java
└── exceptions
└── MyException.java

有两个特殊目录 -- build 用于包含已编译的类和 src 用于包含源文件(可以在不同的子目录中 -- packages)。

以下命令编译整个项目并将结果放入build目录。

javac -sourcepath src -d build src/**/*.java

-sourcepath src 将目录src 指定为编译器可以找到所有源代码的地方。 -d build 选项告诉编译器将编译后的文件放在哪里。

Option src/**/*.java 告诉编译器实际编译哪些文件。在这种特定情况下,它告诉 javac 向下查看两个级别并选择该级别的所有 *.java。

如果 *.java 文件处于不同级别,则需要指定文件列表。为此,可以将此类列表创建为外部文件,并将此文件作为 javac 的输入选项传递。

这是在 Linux/Unix 下如何完成的:

find -name "*.java" > source.txt

上述命令创建文件 source.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 将其更改为 ;(分号)。

关于java - 当其他包中有Java文件时,如何编译多个Java文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17140512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com