提问人:James A. Rosen 提问时间:8/25/2008 更新时间:1/22/2014 访问量:4929
我从哪里获得蚂蚁任务?
Where do I get the Antlr Ant task?
问:
我正在尝试在我的 Ant 构建 .xml 中调用 Antlr 任务,如下所示:
<path id="classpath.build">
<fileset dir="${dir.lib.build}" includes="**/*.jar" />
</path>
...
<target name="generate-lexer" depends="init">
<antlr target="${file.antlr.lexer}">
<classpath refid="classpath.build"/>
</antlr>
</target>
但 Ant 找不到任务定义。我把以下所有内容都放进去了:dir.lib.build
- antlr-3.1.jar
- antlr-2.7.7.jar
- antlr-runtime-3.1.jar
- 字符串模板-3.2.jar
但这些似乎都没有任务定义。(我也试过把这些罐子放在我的蚂蚁类路径中;同样的问题。
答:
当前的 Antlr-task jar 可在 http://www.antlr.org/share/1169924912745/antlr3-task.zip 获得
它可以在 antlr.org 网站上的“文件共享”标题下找到。
您应该使用 antlrall.jar jar。您可以继续将其放入 Ant 安装中,但这确实意味着它仅适用于该安装。我们签入 jar 并使用 taskdef 加载 jar 文件,这样当开发人员开始加入团队或移动到新计算机时,它就不会成为另一个步骤。
- 安特尔 http://ant.apache.org/manual/Tasks/antlr.html
- 使用 taskdef http://www.onjava.com/pub/a/onjava/2004/06/02/anttask.html
我只是让这个为自己工作。花了我一个小时。呸。无论如何
第 1 步:从
http://www.antlr.org/share/1169924912745/antlr3-task.zip
第 2 步:复制到蚂蚁可以看到的地方。我的 mac:
sudo cp /usr/local/lib/ant-antlr3.jar /usr/share/ant/lib/
我的 Linux 盒子:
sudo cp /tmp/ant-antlr3.jar /usr/local/apache-ant-1.8.1/lib/
第 3 步:确保 antlr2、antlr3、ST 在类路径中。多合一在这里:
http://antlr.org/download/antlr-3.3-complete.jar
第 4 步:在 build.xml 中使用
<path id="classpath">
<pathelement location="${antlr3.jar}"/>
<pathelement location="${ant-antlr3.jar}"/>
</path>
<target name="antlr" depends="init">
<antlr:ant-antlr3 xmlns:antlr="antlib:org/apache/tools/ant/antlr"
target="src/T.g"
outputdirectory="build">
<classpath refid="classpath"/>
</antlr:ant-antlr3>
</target>
刚刚添加了一个 faq 条目:
http://www.antlr.org/wiki/pages/viewpage.action?pageId=24805671
评论
在 Ubuntu 上,这应该使其可用:
sudo apt-get install ant-optional
到目前为止,除了其他人的贡献之外,还有其他信息:
Ubuntu 中的软件包包括 Ant 1.8.2 附带的任务,该任务是 ANTLR 2.7.2 的任务,因此这将失败并出现错误,如本文所述。Terence 描述的方法是使用 ANTLR3 任务的最佳方式。ant-optional
如果您在 Linux 计算机上没有 root 访问权限,则可以在 Ant 用户目录中安装 ant-antlr3.jar 文件。检查 ant-antlr3.jar 是否对 Ant 可见,如另一篇文章所述。~/.ant/lib
ant -diagnostics
如果您使用的是 Eclipse,则需要重新启动 IDE,然后它才能识别新任务,并且还需要在类路径中包含 和(但不是必需的)。antlr3.jar
stringtemplate.jar
ant-antlr3.jar
运行 Antlr 的最基本方法是执行 Antlr JAR:
<project default="antlr">
<target name="antlr">
<java jar="antlr-4.1-complete.jar" fork="true">
<arg value="grammar.g4"/>
</java>
</target>
</project>
这有点慢,因为它分叉了 JVM,即使语法没有改变,它也会运行 Antlr。但它在每个 Antlr 版本上都以相同的方式工作,不需要任何特殊目标。
评论