构建Java包(对所有文件进行javac编译)

14

如何将目录中的所有文件编译为*.class文件?


1
1)请查看makefile文件(或ant或maven等); 2)不。 - KevinDTimm
3个回答

25

这个看起来非常明显,所以我可能遗漏了一些东西。

javac *.java

(附带适当的库引用等)

或者说:

javac -d bin *.java

以便javac为输出创建正确的目录结构。

你是否在寻找更复杂的东西?如果是,请提供更多细节(以及您所在的平台)。


4
“我可能漏掉了一些东西”,是的,在编译时不应该在包目录内,否则不能找到命令行中未明确命名的类(即其他包中的类,未包含在编译器的引导路径中)。建议使用 javac super/package/dir/*.java 进行编译(也可以添加 -d-cp 和/或 -sourcepath 参数)。 - Paŭlo Ebermann
这可能是不完整的,因为在Windows 7上我收到了“javac:文件未找到:*.java”的错误。 - Tomáš Zato
@TomášZato:这意味着您当前目录中没有任何.java文件。如果没有源文件,编译源代码就很困难... - Jon Skeet
@JonSkeet 这些文件在子目录中。我真的希望 javac 能够递归地找到它们。 - Tomáš Zato
@UnKnown:然后您指定所有相关目录中的所有文件。 - Jon Skeet
显示剩余3条评论

10

还有一种在UNIX上使用“find”的方法,在此处进行了描述:

http://stas-blogspot.blogspot.com/2010/01/compile-recursively-with-javac.html

以下两个命令将编译目录./src及其子目录中包含的所有.java文件:

find ./src -name *.java > sources_list.txt
javac -classpath "${CLASSPATH}" @sources_list.txt

首先,find命令会生成一个名为sources_list.txt的文件,其中包含Java源文件的路径。接下来,javac使用语法@sources_list.txt编译所有这些源文件。


考虑改进您的帖子,因为您的答案本质上是一个链接。请参阅:答案只包含其他链接真的是“好答案”吗?为什么链接不好? - user557219
2
不错的解决方案。你可以通过使用 /dev/stdin 跳过临时文件,例如:find ./src -name *.java | javac -classpath "${CLASSPATH}" @/dev/stdin - Dunes

3
这是我用来构建整个项目的代码片段,通常情况下源文件嵌套层次很深,并且有许多.jar文件必须放入类路径中(需要UNIX工具):
CLASSPATH=
for x in $(find | grep jar$); do CLASSPATH="$CLASSPATH:$x"; done
SRC=$(find | grep java$)
javac -cp "$CLASSPATH" $SRC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接