【发布时间】:2010-09-17 05:17:06
【问题描述】:
假设我的源代码在我的 src/ 树中(也可能在我的 test/ 树中)。假设我只想编译该树的 part。我可能想要这样做的原因是多种多样的。举个例子,我可能想要创建尽可能小的 jar(不包括某些类),或者我可能想要我正在编译的最快的编译时间。不过,我绝对想编译所有依赖项!
这可以通过命令行轻松实现:
javac -d build/ -cp whatever -sourcepath src src/path/to/MyClass.java
现在,你怎么能用 ant 做到这一点? javac 蚂蚁task compiles everything:
源目录和目标目录 将递归扫描Java 要编译的源文件。
可以使用excludes 和includes 参数,但它们为此目的存在问题。事实上,似乎必须明确设置所有 includes(不是自动依赖查找),以及 甚至最糟糕 excludes has priority on includes:
当包含和排除都是 使用,只有文件/目录 至少匹配其中一项 模式并且不匹配 any 使用排除模式。
因此,您不能使用
<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath"
excludes="**/*.java" includes="src/path/to/MyClass.java" />
因为它不会编译任何东西:-(
有没有办法用 ant 实现那个简单的命令行javac?
已编辑:感谢您的回答,Sadie,我接受了它,因为它确实以我在这个问题中想知道的方式起作用。但是我有几个 cmets(太长了,不能在您答案的评论字段中):
1) 我确实阅读了文档(请参阅上面的链接),但不清楚仅使用 includes 您实际上也排除了其他所有内容
2) 当你只是includes ant 记录类似
[javac] Compiling 1 source file to /my/path/to/build
即使依赖项使它编译(远)不止一个源文件。
【问题讨论】:
-
如果你想创建一个最小的JAR,在
任务中进行;它具有所有必要的属性。如果您想要最快的编译时间...好吧,Java 中的编译总是只需要几秒钟,我不明白您如何在这里获得太多收益。专注于更有用的事情! -
这取决于你的项目有多大。我发现当一个项目超过 600 或 700 个类时,编译开始显着减慢,我必须尝试以某种方式将其拆分。
-
@Vladimir Dyuzhev - 这没有回答 OP 的问题。