gpt4 book ai didi

java - Ant macrodef 编译任务

转载 作者:行者123 更新时间:2023-11-30 11:55:46 26 4
gpt4 key购买 nike

我有一个正在构建的编译器(和语言),通常会这样调用:

java -jar nc.jar \
-p some/referenced/package.nc \
-p framework.nc \
source1.ns source2.ns sourceN.ns \
-o output/package.nc

我想在我的 ANT 构建文件中包含一个任务,该任务调用编译器来编译标准库和所有测试用例,但将每个单独的编译器调用指定为 <java>任务很痛苦:

<target name="framework" depends="compiler" description="Build the n framework">
<!-- More compile steps -->
<java jar="nc.jar" fork="true">
<arg value="-p"/>
<arg path="../nframework/build/n.core.nc"/>
<arg path="../nframework/n/debug/DebugPrint.ns"/>
<arg path="../nframework/n/debug/Trace.ns"/>
<arg value="-o"/>
<arg path="../nframework/build/n.debug.nc"/>
</java>
<!-- More compile steps -->
</target>

我想创建一个 ANT 任务,可以将其简化为:

<target name="framework" depends="compiler" description="Build the n framework">
<!-- More compile steps -->
<nc output="../nframework/build/n.debug.nc">
<link-package path="../nframework/build/n.core.nc"/>
<src>
<fileset dir="../nframework/n/debug" includes="**/*.ns"/>
</src>
</nc>
<!-- More compile steps -->
</target>

为此,我尝试了 macrodef:

<macrodef name="nc">
<attribute name="output"/>
<element name="link-package"/>
<element name="src"/>
<sequential>
<java jar="nc.jar" fork="true">
<arg value="-p"/>
<!-- This doesn't do what I want -->
<link-package/>
<!-- Neither does this -->
<src/>
<arg value="-o"/>
<arg path="@{output}"/>
</java>
</sequential>
</macrodef>

我已经尝试了上面的几个变体,但每个都出现如下错误: /home/jwarner/code/nlang/nc/build.xml:55: java 不支持嵌套的“fileset”元素。

有没有办法在不扩展 ANT 本身的情况下做到这一点?或者,向我的编译器添加一个 ant 任务会不会很容易?我对最后 <nc> 的语法不是很挑剔任务。

最佳答案

我过去遇到过类似的问题,开箱即用的 Ant 任务并没有完全按照我的要求进行。我发现编写自己的 Ant 任务非常容易。

文档简洁明了,但很好地解释了您需要做什么。

http://ant.apache.org/manual/develop.html#writingowntask

关于java - Ant macrodef 编译任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4808020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com