如何使用特定的javac可执行文件告诉ant构建?

如何告诉ant从命令行使用特定的javac可执行文件?

我在我们分发的库中安装了gcj,作为gcc的一部分构建,我希望有一个特定的Java软件。 但是,它似乎只是使用system-gcc,而诸如“-Dbuild.compiler”之类的选项似乎要我指定某种Java类而不是文件路径。

我希望在Makefiles中有类似于CC的东西。

我确定这很简单,我只是愚蠢。


为了清楚起见,我想尽可能避免自己编辑构建文件。 是否有一些标准的方法来简单地在命令行上指定编译器到ant? 我不介意构建文件在某种意义上“表现良好”的假设。

如果您使用的是Ant 1.6或更高版本,则可以设置javac属性fork="yes" 。 这使您能够在使用jikes,jvc,gcj,sj或您正在使用的任何版本的javac时指定可执行文件的路径。

   

调用ant时的-D参数将使用Ant脚本内部命令行中的属性。 它使用的forms是:

ant -Dmyvar=true

其中myvar是属性的名称, true是您要在脚本中使用的值。

最简单的方法是为javac可执行属性使用属性。

     

然后在命令行上调用:

 ant compile -Djavac.executable=/usr/bin/local/jdk/javac -Dsrc=/home/src -Dbuild=/home/build -Dcompiler=javac1.6 -Dfork=true 

从javac任务页面 :

可以使用不同的编译器。 这可以通过设置全局build.compiler属性来指定,该属性将影响整个构建中的所有任务,方法是设置特定于当前任务的编译器属性,或者使用实现org的任何typedeffed或componentdeffed类型的嵌套元素。 apache.tools.ant.taskdefs.compilers.CompilerAdapter。 build.compiler属性或编译器属性的有效值为:

  • classic (JDK 1.1 / 1.2的标准编译器) – javac1.1和javac1.2可以用作别名。
  • modern (JDK 1.3 / 1.4 / 1.5 / 1.6 / 1.7的标准编译器) – javac1.3和javac1.4以及javac1.5和javac1.6以及javac1.7(因为Ant 1.8.2)可以用作别名。
  • jikes (Jikes编译器)。
  • jvc (Microsoft的SDK for Java / Visual J ++的命令行编译器) – microsoft可以用作别名。
  • kjc (kopi编译器)。
  • gcj (来自gcc的gcj编译器)。
  • sj (Symantec java编译器) – 赛门铁克可以用作别名。
  • extJavac (在自己的JVM中运行现代或经典)。

我读这个的方式,你需要编写一个实现CompilerAdapter的类并使用你的编译器。 然后键入dede该任务并在javac编译器属性中使用它。

我以前做过类似的事情,使用Ant Exec任务。 见http://ant.apache.org/manual/Tasks/exec.html

它允许您调用特定的系统命令。 在我们的例子中,我们需要调用Delphi(不要问)为特定项目构建一些DLL。 exec命令还允许您调用gcj而不是javac。