有没有办法强制执行javac
任务只调用注解处理,不编译。 -proc:only
根据 javac documentation,javac 选项应该强制执行此类行为。 .
但是下面的 ant 构建文件片段:
<target name="apt">
<javac srcdir="src" destdir="bin" includeantruntime="false">
<compilerarg value="-proc:only"/>
</javac>
</target>
无论如何编译项目。我尝试了其他 <compilerarg>
标记版本(例如 line
而不是 value
)但没有任何帮助。
最佳答案
避免指定任务的“destdir”属性,或使用空目录作为类文件的目的地。然后 Ant“javac”任务将在基本目录(如果您未设置“destdir”)或空目录中查找类文件。因为它不会在那里找到类文件,所以它不会从编译中排除可能是最新的源代码,并且不会在“srcdir”属性中指定的目录中的源代码上执行“javac”。
因此,您的代码将如下所示:
<target name="apt">
<javac srcdir="src" includeantruntime="false">
<compilerarg value="-proc:only" />
</javac>
</target>
或者,如果您使用空目录方法,如下所示:
<target name="apt">
<mkdir dir="empty" />
<javac srcdir="src" destdir="empty" includeantruntime="false">
<compilerarg value="-proc:only" />
</javac>
</target>
第二种方法稍微复杂一些,但更简洁一些。通常你的项目会有一个输出目录,你可以在其中放置编译的类和打包的 jar,所以在那里添加一个额外的空目录不会有什么坏处。从 Ant 版本 1.9.4 开始,我没有找到任何其他方法来独立于编译从 Ant 进行注释处理,即使“javac”任务中的一个简单的“force”属性可以解决这个问题。
关于Ant:带有 proc 的 javac:仅来自 Ant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11858444/