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

发布于 2024-12-11 11:12:07 字数 351 浏览 0 评论 0原文

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

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

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

我确信这真的很简单,我只是很愚蠢。


需要明确的是,如果可能的话,我想避免自己编辑构建文件。是否没有一些标准方法可以简单地在命令行上指定 ant 的编译器?我不介意构建文件在某种意义上“行为良好”的假设。

How can I tell ant to use a specific javac executable from the command line?

I have an installation of gcj, built as part of gcc, within a library we distribute, and I'd like to have a particular piece of Java software built against that. However, it just seems to use the system-gcc, and options such as "-Dbuild.compiler" seem to want me to specify some kind of Java class rather than a filepath.

I was hoping for something similar to CC in Makefiles.

I'm sure it's something really simple, and I'm just being stupid.


To be clear, I'd like to avoid editing the build file myself if possible. Is there not some standard way to simply specify the compiler on the command-line to ant? I don't mind the assumption that the buildfile is "well-behaved" in some sense.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

嗼ふ静 2024-12-18 11:12:07

如果您使用 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"
  />

If you are using Ant 1.6 or higher, you can set the javac attribute fork="yes". This gives you the ability to specify the path of your executable when using jikes, jvc, gcj, sj, or whatever version of javac you are using.

  <javac srcdir="${src}"
         destdir="${build}"
         fork="yes"
         executable="/opt/java/jdk1.1/bin/javac"
         compiler="javac1.1"
  />
娜些时光,永不杰束 2024-12-18 11:12:07

调用 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

The -D argument when calling ant will use a property from the command line inside of the Ant script. The form that it is used in is:

ant -Dmyvar=true

Where myvar is the name of the property, and true is the value you want to use in your script.

The easiest way then would be to use a property for your javac executable attributes.

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

and then on the command line you could call:

ant compile -Djavac.executable=/usr/bin/local/jdk/javac -Dsrc=/home/src -Dbuild=/home/build -Dcompiler=javac1.6 -Dfork=true
姐不稀罕 2024-12-18 11:12:07

javac 任务页面

可以使用不同的编译器。这可以通过以下方式指定
设置全局 build.compiler 属性,这会影响
通过设置编译器,构建整个构建过程中的所有任务
属性,特定于当前任务或使用嵌套
任何类型定义或组件定义类型的元素实现
org.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 编译器) – symantec 可以用作别名。
  • extJavac(在自己的 JVM 中运行现代或经典)。

按照我的理解,您需要编写一个实现 CompilerAdapter 并使用您的编译器的类。然后 typedef 该任务并在 javac 编译器属性中使用它。

From the javac task page:

It is possible to use different compilers. This can be specified by
either setting the global build.compiler property, which will affect
all tasks throughout the build, by setting the compiler
attribute, specific to the current task or by using a nested
element of any typedeffed or componentdeffed type that implements
org.apache.tools.ant.taskdefs.compilers.CompilerAdapter. Valid values
for either the build.compiler property or the compiler attribute are:

  • classic (the standard compiler of JDK 1.1/1.2) – javac1.1 and javac1.2 can be used as aliases.
  • modern (the standard compiler of JDK 1.3/1.4/1.5/1.6/1.7) – javac1.3 and javac1.4 and javac1.5 and javac1.6 and javac1.7 (since Ant 1.8.2) can be used as aliases.
  • jikes (the Jikes compiler).
  • jvc (the Command-Line Compiler from Microsoft's SDK for Java / Visual J++) – microsoft can be used as an alias.
  • kjc (the kopi compiler).
  • gcj (the gcj compiler from gcc).
  • sj (Symantec java compiler) – symantec can be used as an alias.
  • extJavac (run either modern or classic in a JVM of its own).

The way I read this, you need to write a class that implements CompilerAdapter and uses your compiler. Then typedef that task and use it in the javac compiler attribute.

长发绾君心 2024-12-18 11:12:07

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

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

I've done something similiar before, using the Ant Exec task. See http://ant.apache.org/manual/Tasks/exec.html

It allows you to call a specific system command. In our case, we needed to call Delphi (don't ask) to build some DLL's for a particular project. The exec command would also allow you to call gcj instead of javac.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文