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



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

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

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

我肯定是很简单的东西,我只是在犯傻。


要清楚,如果可能的话,我想避免自己编辑构建文件。难道没有一些标准的方法可以简单地在命令行上指定编译器吗?我不介意假设构建文件在某种意义上是"表现良好的"。

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

  <javac srcdir="${src}"
         destdir="${build}"
         fork="yes"
         executable="/opt/java/jdk1.1/bin/javac"
         compiler="javac1.1"
  />

调用ant时的-D参数将使用来自ant脚本内部命令行的属性。它的使用形式是:

ant -Dmyvar=true

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

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

 <target name="compile">  
   <javac srcdir="${src}"
     destdir="${build}"
     fork="${fork}"
     executable="${javac.executable}"
     compiler="${compiler}"/>  
 </target>

然后在命令行你可以调用:

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

从javac任务页:

可以使用不同的编译器。这可以通过要么设置全局build.compiler属性,这将影响通过设置编译器,在整个构建过程中执行所有任务属性,特定于当前任务或通过使用嵌套的的任何类型定义或组件定义类型的元素org.apache.tools.ant.taskdefs.compilers.CompilerAdapter。有效值对于build.compiler属性或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的Java/Visual j++ SDK的命令行编译器)- Microsoft可以用作别名。
  • kjc (kopi编译器).
  • gcj (gcj编译器从gcc).
  • sj(赛门铁克java编译器)-赛门铁克可以用作别名。
  • extJavac(在自己的JVM中运行现代或经典)。
在我看来,你需要写一个类来实现CompilerAdapter并使用你的编译器。然后在javac编译器属性中定义该任务并使用它。

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

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

相关内容

  • 没有找到相关文章

最新更新