编译所有子文件夹中的java文件?

如何使用javac编译Unix上所有子文件夹中的所有java文件?

使用Ant或Maven等构建工具。 两者都允许您以比使用find UNIX工具完成更好的方式管理依赖项。 And和Maven还允许您定义除编译之外要执行的自定义任务。 Maven还提供了管理远程存储库中外部依赖关系的约定,以及运行unit testing和支持持续集成的function的约定。

即使您只需要偶尔编译源文件,您也可能会发现设置一个简单的Ant build.xml文件最终可以节省大量时间。

最后,大多数流行的IDE和代码编辑器应用程序都与Ant构建脚本进行了某种集成,因此您可以在编辑器中运行所有Ant任务。 NetBeans , Eclipse , IDEA等也内置了对Maven的支持。

如果您是Ant的新手,请先阅读此内容 。 以下是链接中的示例构建文件:

   simple example build file                            

一旦熟悉了Ant,就会发现移动到Maven更容易。

在Windows上……

创建批处理文件:

 for /r %%a in (.) do (javac %%a\*.java) 

…然后在顶级源文件夹中执行它。

在Linux上……

 javac $(find ./rootdir/* | grep .java) 

两个答案都取自这个post……

http://forums.oracle.com/forums/thread.jspa?threadID=1518437&tstart=15

但正如其他人所说,构建工具可能会有所帮助。

我不知道这是不是最好的方法,但这应该有效:

 find . -name "*.java" | xargs javac 

使用Ant编写脚本以编译任意数量的源文件夹。

使用Maven (作为Ant的更现代的替代品)。

使用IDE,比如Eclipse (我知道的所有IDE都会很乐意为您编译多个源文件夹)

另一种(不太灵活)的方式,如果你知道有多少文件夹级别:

javac *.java */*.java */*/*.java */*/*/*.java */*/*/*/*.java ...

在使用shopt -s nullglob bash中,您可能必须将其设置为将非匹配模式扩展为空,具体取决于您的shell。 例如,我使用以下shell函数在我的java文件中查找文本:

 function jgrep () { ( shopt -s nullglob egrep --color=ALWAYS -n "$@" *.tex *.java */*.java */*/*.java */*/*/*.java */*/*/*/*.java */*/*/*/*/*.java ) } jgrep String 

但实际上,正如其他人所说,使用构建工具。