如何告诉ant使用特定的javac可执行文件进行构建?
我如何告诉ant使用命令行中的特定javac可执行文件 我在我们分发的库中安装了gcj,它是作为gcc的一部分构建的,我希望有一个特定的Java软件基于此构建。然而,它似乎只是使用了系统gcc,而“-Dbuild.compiler”等选项似乎希望我指定某种Java类而不是文件路径 我希望Makefiles中有类似于CC的东西 我相信这是件很简单的事,我只是在装傻如何告诉ant使用特定的javac可执行文件进行构建?,java,ant,build,executable,javac,Java,Ant,Build,Executable,Javac,我如何告诉ant使用命令行中的特定javac可执行文件 我在我们分发的库中安装了gcj,它是作为gcc的一部分构建的,我希望有一个特定的Java软件基于此构建。然而,它似乎只是使用了系统gcc,而“-Dbuild.compiler”等选项似乎希望我指定某种Java类而不是文件路径 我希望Makefiles中有类似于CC的东西 我相信这是件很简单的事,我只是在装傻 明确地说,如果可能的话,我希望避免自己编辑构建文件。是否有一些标准方法可以简单地在命令行上将编译器指定给ant?我不介意构建文件在某
明确地说,如果可能的话,我希望避免自己编辑构建文件。是否有一些标准方法可以简单地在命令行上将编译器指定给ant?我不介意构建文件在某种意义上是“行为良好”的假设。来自: 可以使用不同的编译器。这可以通过以下方式指定: 设置global build.compiler属性,这将影响 通过设置编译器,生成过程中的所有任务 属性,特定于当前任务或使用嵌套 实现的任何TypeDefed或ComponentDefed类型的元素 org.apache.tools.ant.taskdefs.compilers.CompilerAdapter。有效值 对于build.compiler属性或编译器属性:
(JDK1.1/1.2的标准编译器)–javac1.1和javac1.2可以用作别名classic
(JDK1.3/1.4/1.5/1.6/1.7的标准编译器)–javac1.3和javac1.4、javac1.5和javac1.6和javac1.7(自Ant 1.8.2以来)可以用作别名modern
(jikes编译器)jikes
(来自Microsoft的SDK for Java/Visual J++的命令行编译器)-Microsoft可以用作别名jvc
(kopi编译器)kjc
(gcc的gcj编译器)gcj
(赛门铁克java编译器)–赛门铁克可以用作别名sj
(在自己的JVM中运行modern或classic)extJavac
按照我阅读本文的方式,您需要编写一个实现CompilerAdapter并使用编译器的类。然后键入def该任务并在javac编译器属性中使用它。如果您使用的是Ant 1.6或更高版本,则可以设置
javac
属性fork=“yes”
。这使您能够在使用jikes、jvc、gcj、sj或您正在使用的任何版本的javac
时指定可执行文件的路径
<javac srcdir="${src}"
destdir="${build}"
fork="yes"
executable="/opt/java/jdk1.1/bin/javac"
compiler="javac1.1"
/>
我以前使用Ant Exec任务做过类似的事情。看
它允许您调用特定的系统命令。在我们的例子中,我们需要调用Delphi(不要问)为特定项目构建一些DLL。exec命令还允许您调用gcj而不是javac。-D参数在调用ant时将使用ant脚本内部命令行中的属性。其使用形式为:
ant-Dmyvar=true
其中,myvar
是属性的名称,true
是要在脚本中使用的值
最简单的方法是为javac可执行文件属性使用属性
<target name="compile">
<javac srcdir="${src}"
destdir="${build}"
fork="${fork}"
executable="${javac.executable}"
compiler="${compiler}"/>
</target>
fork=“yes”选项似乎要干净得多。活到老学到老!实际上,据我所知,
gcj
支持已经内置。新的CompilerAdapter仅在使用列表中未列出的另一个编译器时才需要。在我将其设置为gcj后,我是否可以以某种方式专门提供gcj可执行文件的路径?我不想使用系统范围的gcj。这是一个很好的建议,但这是在实际的ant文件中指定可执行文件,而不是在命令中line@bakoyaro. 使用可执行文件的属性,然后通过-D(例如,-Dmyjavacpath=which)从命令行传递它,就可以轻松解决这一问题,只要设置${myjavacpath}variabile@Matteo请看我贴出的这个问题的答案。
ant compile -Djavac.executable=/usr/bin/local/jdk/javac -Dsrc=/home/src -Dbuild=/home/build -Dcompiler=javac1.6 -Dfork=true