8

我正在尝试通过命令行覆盖 Ant 编译器属性,以便所有“javac”任务都使用我指定的编译器。我遇到的问题是任何为编译器设置自己的值的目标都会覆盖我在命令行中设置的目标。所以,即使我正在输入以下命令。

ant -Dbuild.compiler=mycompiler  

由于该 compiler="modern" 属性,任何具有以下内容的目标都将使用现代编译器而不是 mycompiler

<javac srcdir="."  
       destdir="${classes.dir}/core"  
       compiler="modern"  
       encoding="UTF-8">  
    <include name="org/**" />  
    <include name="com/**" />  
    <compilerarg line="${config.build.compilerarg}" />  
</javac>    

有什么方法可以从命令行覆盖它,还是我一直在编辑构建文件?

4

1 回答 1

8

Antjavac任务文档说:

可以使用不同的编译器。这可以通过设置全局 build.compiler 属性来指定,这将影响整个构建过程中的所有任务,或者通过设置特定于当前任务的编译器属性来指定。build.compiler 属性或编译器属性的有效值为:

听起来好像您可以指定全局 build.compiler 属性设置特定的编译器属性。

因此,您似乎需要修改构建文件,并且:

  1. 从 javac 调用中删除编译器属性并允许全局 build.compiler 设置向下级联

  2. 将编译器属性的值从硬编码字符串 compiler="modern"更改为属性 compiler="${javac.compiler}"

于 2008-10-24T23:05:51.473 回答