【发布时间】:2011-07-07 11:27:03
【问题描述】:
我需要在编译之前过滤 java 文件,保持原始源不变并从过滤后的源编译(基本上,我需要设置构建日期等)。 我正在使用具有出色 Ant 构建文件的 NetBeans。
所以,有一天我发现需要在编译之前对源文件进行预处理,结果遇到了一个大问题。不,我没有立即跑到 SO,我做了一些研究,但失败了。所以,我的悲伤故事来了……
我找到了“复制”任务的“过滤器”选项,覆盖了 build-impl.xml 文件中的宏定义“j2seproject3:javac”,并在其中添加了过滤器。我得到了想要的结果,是的,但是现在我的测试不起作用,因为它们也使用了那个宏定义。
接下来,我厌倦了覆盖“-do-compile”目标,将文件复制和过滤到目录 build/temp-src,并将新源目录的参数传递给“j2seproject3:javac”:
<target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,
-compile-depend,-prepare-sources"
if="have.sources" name="-do-compile">
<j2seproject3:javac gensrcdir="${build.generated.sources.dir}" srcdir="build/temp-src"/>
<copy todir="${build.classes.dir}">
<fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
</copy>
</target>
现在 Ant 对我说,有问题的宏定义不存在!
The prefix "j2seproject3" for element "j2seproject3:javac" is not bound.
这很奇怪,因为 build-impl.xml 包含那个宏定义,并且 build-impl.xml 被导入到主构建文件中。
顺便说一下,我不能直接编辑 build-impl.xml,因为 NetBeans 会在其他构建时重写它。
所以,我的问题是:如何在 NetBeans 中编译之前自动过滤源代码,并且不中断构建过程?
【问题讨论】:
-
我认为在源文件中设置构建日期没有意义。更常见的是将该信息添加到从构建生成的 jar 文件中的清单中。
-
@Kevin Stembridge - 是的,最好在清单中这样做。但是,例如,如果您需要预处理文件、扩展代码模板、使用代码生成器等 - 您将需要其他东西。