如何使用特定的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。