用例很简单。我得到了使用Eclipse创建的源文件。因此,有一个深层的目录结构,其中任何Java类都可以引用同一,子,兄弟或父文件夹中的另一个Java类。
我如何使用javac从终端编译整个程序?
用例很简单。我得到了使用Eclipse创建的源文件。因此,有一个深层的目录结构,其中任何Java类都可以引用同一,子,兄弟或父文件夹中的另一个Java类。
我如何使用javac从终端编译整个程序?
Answers:
您必须知道所有目录,或者能够使用通配符..
javac dir1/*.java dir2/*.java dir3/dir4/*.java dir3/dir5/*.java dir6/*src/*.java
javac $(find . -name "*.java")
。
使用Bash 4+,您可以仅启用globstar
shopt -s globstar
然后做
javac **/*.java
如果您要做的只是运行主类(而不编译.java
不依赖主类的文件),则可以执行以下操作:
cd <root-package-directory>
javac <complete-path-to-main-class>
要么
javac -cp <root-package-directory> <complete-path-to-main-class>
javac
会自动解决所有依赖关系,并编译所有依赖关系。
-sourcepath .
选项,然后以相同的效果命名主文件
find . -type f -name "*.java" | xargs javac
是2,并且只有在包含整个应用程序的单个main方法入口点时,才使用此方法。
find_gnu . -type f -name "*.java" | xargs javac
一旦将find.exe的gnu版本重命名为find_gnu.exe,就可以使用。我从msysgit获得了gnu find.exe。
for /f "usebackq" %f in (``dir /s /b *.java``) do javac %f
使用单反引号,dir /s /b
但我找不到正确格式化它的方法)。
find
解决方案是有问题的,因为它会分别编译每个java类,因此速度很慢。
以下是我发现的方法:
1)如下创建文件的列表,并在文件中添加相对路径(例如FilesList.txt)(以空格分隔或以行分隔):
foo/AccessTestInterface.java
foo/goo/AccessTestInterfaceImpl.java
2)使用命令:
javac @FilesList.txt -d classes
这将编译所有文件,并将类文件放入classes目录中。
现在,创建FilesList.txt的简单方法是:转到源根目录。
dir *.java /s /b > FilesList.txt
但是,这将填充绝对路径。使用文本编辑器“全部替换”使用“”(即空字符串)并保存到源目录(最后包括\)的路径。
已经存在的答案似乎只与* .java文件本身有关,而与如何轻松构建可能需要的库文件有关。
递归获取所有* .java文件以及包括构建所需的* .jar文件的一种单行情况是:
javac -cp ".:lib/*" -d bin $(find ./src/* | grep .java)
这里的bin文件是类文件的目标,lib(可能还有当前的工作目录)包含库文件,并且src目录及其下面的所有java文件都已编译。
您必须使用类似Ant之类的方法来分层执行此操作:
http://ant.apache.org/manual/Tasks/javac.html
您将需要使用一个名为compile的目标来创建一个构建脚本,其中包含以下内容:
<javac sourcepath="" srcdir="${src}"
destdir="${build}" >
<include name="**/*.java"/>
</javac>
然后,您将可以通过运行以下命令来编译所有文件:
ant compile
或者,将您的项目导入Eclipse,它将自动编译该项目的所有源文件。