Pergunta

Estou tentando chamar uma tarefa Antlr em meu Ant build.xml da seguinte maneira:

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

Mas o Ant não consegue encontrar a definição da tarefa.Eu coloquei todos os itens a seguir nisso dir.lib.build:

  • antlr-3.1.jar
  • antlr-2.7.7.jar
  • antlr-runtime-3.1.jar
  • stringtemplate-3.2.jar

Mas nenhum deles parece ter a definição de tarefa.(Eu também tentei colocar esses jars no meu caminho de classe Ant;mesmo problema.)

Foi útil?

Solução

O jar Antlr-task atual está disponível em http://www.antlr.org/share/1169924912745/antlr3-task.zip

Ele pode ser encontrado no antlr.org site sob o título "Compartilhamento de arquivos".

Outras dicas

Você deve usar o jar antlrall.jar.Você pode ir em frente e simplesmente colocá-lo na instalação do Ant, mas isso significa que ele só funcionará para aquela instalação.Fazemos check-in do jar e usamos taskdef para carregar o arquivo jar, para que ele não se torne mais uma etapa para os desenvolvedores quando eles iniciam na equipe ou mudam para um novo computador.

Acabei de fazer isso funcionar sozinho.Levei uma hora.eca.de qualquer forma,

Passo 1:baixar tarefa ant-antlr3 de

http://www.antlr.org/share/1169924912745/antlr3-task.zip

Passo 2:copie para onde a formiga possa vê-lo.Meu Mac:

sudo cp /usr/local/lib/ant-antlr3.jar /usr/share/ant/lib/

minha caixa linux:

sudo cp /tmp/ant-antlr3.jar /usr/local/apache-ant-1.8.1/lib/

Etapa 3:certifique-se de que antlr2, antlr3, ST estejam no caminho de classe.Tudo em um está aqui:

http://antlr.org/download/antlr-3.3-complete.jar

Passo 4:usar em 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>

Acabei de adicionar uma entrada de perguntas frequentes:

http://www.antlr.org/wiki/pages/viewpage.action?pageId=24805671

A maneira mais básica de executar o Antlr é executar o Antlr JAR:

<project default="antlr">
  <target name="antlr">
    <java jar="antlr-4.1-complete.jar" fork="true">
      <arg value="grammar.g4"/>
    </java>
  </target>
</project>

Isso é um pouco mais lento, porque bifurca a JVM e executa o Antlr mesmo que a gramática não tenha mudado.Mas funciona da mesma maneira com todas as versões do Antlr e não precisa de nenhum alvo especial.

No Ubuntu, isso deve disponibilizá-lo:

sudo apt-get install ant-optional

Informações adicionais além das contribuições de todos os outros até agora:

O ant-optional O pacote no Ubuntu inclui a tarefa fornecida com o Ant 1.8.2, que é uma tarefa para o ANTLR 2.7.2, portanto, isso falhará com um erro conforme descrito nesta postagem.O método descrito por Terence é a melhor forma de utilizar a tarefa ANTLR3.

Se você não tiver acesso root em uma máquina Linux, poderá instalar o arquivo ant-antlr3.jar no diretório do usuário Ant: ~/.ant/lib.Verificar com ant -diagnostics se ant-antlr3.jar está visível para Ant, conforme explicado neste outro post.

Se você estiver usando o Eclipse, será necessário reiniciar o IDE antes que ele reconheça a nova tarefa e também precisará incluir antlr3.jar e stringtemplate.jar no seu caminho de classe (mas ant-antlr3.jar não é necessário).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top