OKG*_*ney 16 java compilation javac
我正在编译目录中的多个文件(javac*.java)但是当我尝试这样做时遇到问题:
我得到编译错误,说javac无法找到对象的符号.
我有多个包,包含运行主程序所需的java文件.但似乎尝试逐个编译这些将无法正常工作.它在我的IDE中运行良好,但我有兴趣通过命令提示符了解它是如何完成的.
主程序位于drivers文件夹中.
我已经尝试按依赖顺序编译文件但是没有用.
01e*_*1es 20
Javac 文档提供了所有必要的信息.但是,将Ant或Maven用于命令行构建可能很有用.
这个页面提供了一个使用第一个javac然后使用Ant来构建一个简单项目的好例子.
这是一个示例项目,如何使用javac进行编译.
该项目的树结构是这样的:
.
??? build
??? src
??? attacks
??? drivers
? ??? Driver.java
??? exceptions
??? MyException.java
Run Code Online (Sandbox Code Playgroud)
有两个特殊目录 - build用于包含已编译的类和src包含源文件(可能位于不同的子目录 - 包中).
以下命令编译整个项目并将结果放入build目录中.
javac -sourcepath src -d build src/**/*.java
Run Code Online (Sandbox Code Playgroud)
在-sourcepath src指定目录src的所有的源可以被编译器发现的地方.该-d build选项告诉编译器在何处放置编译后的文件.
Option src/**/*.java告诉编译器实际编译哪些文件.在这个特定情况下,它告诉javac向下看两个级别并在该级别选择所有*.java.
如果存在*.java不同级别的文件,则需要指定文件列表.为此,可以将此列表创建为外部文件,并将此文件作为输入选项传递给javac.
以下是在Linux/Unix下如何做到这一点:
find -name "*.java" > source.txt
Run Code Online (Sandbox Code Playgroud)
上面的命令创建文件source.txt,其中包含找到的*.java文件的完整路径.对于此示例,它包含:
./src/drivers/Driver.java
./src/exceptions/MyException.java
Run Code Online (Sandbox Code Playgroud)
为了使用刷新的源文件列表编译项目,source.txt可以使用以下命令:
javac -d build @source.txt
Run Code Online (Sandbox Code Playgroud)
请注意,最后@source.txt指定告诉编译器在哪里查找源文件列表.另请注意,该-sourcepath选项可以省略.
以下是运行上述命令后目录结构的更改方式.
.
??? build
? ??? drivers
? ? ??? Driver.class
? ??? exceptions
? ??? MyException.class
??? src
??? attacks
??? drivers
? ??? Driver.java
??? exceptions
??? MyException.java
Run Code Online (Sandbox Code Playgroud)
可以看出,build目录现在包含相应包中的已编译类文件.
并且,如果您想运行它,例如假设Driver有方法main,则以下命令执行该程序.
java -cp .:build:**/*.class drivers.Driver
Run Code Online (Sandbox Code Playgroud)
请注意,:在Unix下使用文件分隔符(冒号),Windows将其更改为;(分号).