我试图按如下方式在我的Ant build.xml中调用Antlr任务:
1 2 3 4 5 6 7 8 9 10 11
| <path id="classpath.build">
<fileset dir="${dir.lib.build}" includes="**/*.jar" />
</path>
...
<target name="generate-lexer" depends="init">
<classpath refid="classpath.build"/>
</antlr>
</target> |
但是Ant找不到任务定义。 我在dir.lib.build中放置了以下所有内容:
-
antlr-3.1.jar
-
antlr-2.7.7.jar
-
antlr-runtime-3.1.jar
-
stringtemplate-3.2.jar
但是这些似乎都没有任务定义。 (我也尝试过将这些罐子放在Ant类路径中;同样的问题。)
当前的Antlr任务jar可在http://www.antlr.org/share/1169924912745/antlr3-task.zip中找到
可以在antlr.org网站的"文件共享"标题下找到该文件。
我只是为自己工作。花了我一个小时。啊。无论如何,
步骤1:从下载ant-antlr3任务
http://www.antlr.org/share/1169924912745/antlr3-task.zip
步骤2:复制到蚂蚁可以看到的地方。我的Mac:
须藤cp /usr/local/lib/ant-antlr3.jar / usr / share / ant / lib /
我的Linux盒子:
须藤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中使用
1 2 3 4 5 6 7 8 9 10 11 12
| <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> |
刚刚添加了一个常见问题条目:
http://www.antlr.org/wiki/pages/viewpage.action?pageId=24805671
您应该使用antlrall.jar jar。您可以继续并将其放到Ant安装中,但这确实意味着它仅适用于该安装。我们检入jar文件,并使用taskdef加载jar文件,以使开发人员在团队中开始工作或转移到新计算机时,它不会成为下一步。
-
Antlr http://ant.apache.org/manual/Tasks/antlr.html
-
使用taskdef http://www.onjava.com/pub/a/onjava/2004/06/02/anttask.html
运行Antlr的最基本方法是执行Antlr JAR:
1 2 3 4 5 6 7
| <project default="antlr">
<target name="antlr">
<java jar="antlr-4.1-complete.jar" fork="true">
</java>
</target>
</project> |
这有点慢,因为即使语法没有变化,它也会派生JVM并运行Antlr。但是它与每个Antlr版本都以相同的方式工作,并且不需要任何特殊的目标。
到目前为止,其他所有人都提供了其他信息:
Ubuntu中的ant-optional软件包包括Ant 1.8.2附带的任务,这是ANTLR 2.7.2的任务,因此它将失败,并出现错误,如本文所述。 Terence描述的方法是使用ANTLR3任务的最佳方法。
如果您在Linux计算机上没有root用户访问权限,则可以在Ant用户目录~/.ant/lib中安装ant-antlr3.jar文件。按照ant -diagnostics检查ant-antlr3.jar是否对Ant可见,如本篇其他文章中所述。
如果使用的是Eclipse,则必须先重新启动IDE才能识别新任务,并且还需要在类路径中包含antlr3.jar和stringtemplate.jar(但不必ant-antlr3.jar)。
在Ubuntu上,这应该使其可用:
sudo apt-get install ant-optional