Já alguma vez desejou ter um esquema para o Apache Ant?

Recentemente, tive alguns problemas com os ficheiros Ant para um projeto de software em que estava a trabalhar. Estava a editar um deles no XMLSpy, mas não estava a receber sugestões ou autocompletar o código porque não tinha um esquema associado ao meu script.

Parecia ser um problema simples, então parti à procura do esquema.

Encontrei rapidamente uma pergunta no Stack Overflow onde alguém procurava a mesma coisa. A resposta é que não existe nenhum esquema ou DTD para o Ant. A razão é simples: além do desafio de criar um modelo flexível e abrangente do núcleo do Ant, seria possível incluir todas as tarefas externas.

Imediatamente, lembrei-me de que já tinha estado aqui há alguns anos, mas desta vez pensei em usar a funcionalidade de geração de esquemas do XMLSpy para tentar resolver o problema..

XMLSpy XML editor

Se não for possível implementar um esquema oficial, pode usar o XMLSpy para criar rapidamente um esquema que cubra as tarefas e funcionalidades específicas que utiliza. À medida que utiliza mais funcionalidades, adicionar elementos ao seu XSD é um esforço muito pequeno, em troca de um excelente suporte de edição e ajuda na validação.

O XMLSpy consegue gerar esquemas a partir de um conjunto de ficheiros XML. O processo funciona da seguinte forma: cria um projeto selecionando "Novo Projeto" no menu "Projeto". Certifique-se de que a janela do projeto está aberta; caso contrário, utilize o menu "Janela" para a abrir. Em seguida, adicione os seus ficheiros Ant a uma pasta dentro do projeto, clicando com o botão direito na pasta e selecionando "Adicionar Ficheiros".

Depois de adicionar os ficheiros, clique novamente com o botão direito na pasta e selecione "Gerar DTD/Schema".

O meu projeto tem dezenas de scripts Ant, pelo que temos uma amostra bastante representativa da utilização do Ant no desenvolvimento que estamos a realizar. Isso significa que o XMLSpy irá analisar todas as diferentes formas como utilizamos o Ant e irá gerar um esquema que abrange tudo o que temos feito com o Ant até agora.

A criação do esquema foi muito simples. No entanto, embora o XMLSpy seja excelente na geração de modelos, ao introduzir 60 ficheiros Ant, é inevitável obter um esquema muito extenso. Pode ver as minhas opções no diálogo "Gerar esquema" na captura de ecrã. As opções mais importantes para mim foram obter tipos globais e poucas enumerações, para simplificar a extensão do esquema.

Antes de aprimorar o novo esquema XSD, tive de decidir o que pretendia alcançar com este trabalho.

O Ant é extremamente flexível e permite uma grande variedade de valores nos atributos, e muitas tarefas externas não estão organizadas em espaços de nomes. Não pretendia um esquema perfeito, apenas um que fosse útil para este projeto. O meu objetivo era ter um esquema muito flexível que permitisse ao XMLSpy oferecer suporte de auxílio na edição de ficheiros Ant, de forma a agilizar o processo.

A longo prazo, talvez queiramos ser um pouco mais rigorosos para nos ajudar a escrever ficheiros Ant consistentes e corretos, mas isso é para o futuro. No entanto, inicialmente, eu só queria uma demonstração muito simples.

Tendo isso em mente, comecei a simplificar o esquema gerado. O XMLSpy gera esquemas XSD que abrangem todos os casos de forma exaustiva. Ele me forneceu um esquema tecnicamente correto, mas com um nível de detalhe maior do que eu queria ou precisava. No entanto, na visualização do XSD, bastaram alguns minutos de arrastar elementos e consolidar ramos desnecessários para chegar a um modelo muito mais simples.

O primeiro indicador de sucesso foi quando consegui validar todos os cerca de 60 ficheiros Ant em relação ao meu esquema XSD simplificado. Depois de adicionar alguns elementos que tinha perdido acidentalmente durante a limpeza, tudo funcionou. Cliquei com o botão direito no meu projeto e selecionei "validar tudo". Tudo foi validado num processo rápido de 5 segundos.

O segundo aspeto importante foi a obtenção de ajuda contextualizada no XMLSpy ao criar um novo ficheiro Ant. Rapidamente percebi que haveria muitos novos elementos a adicionar ao longo do tempo, à medida que utilizássemos novas tarefas e funcionalidades. Por exemplo, descobri que precisava de adicionar o elemento sysproperty ao junit porque não o tínhamos usado antes.

No entanto, adicionar um elemento ou atributo aqui ou ali é simples na visualização do esquema, e com o tempo, precisaremos fazê-lo cada vez menos.

No geral, para os meus objetivos simples, criar um esquema Ant revelou-se uma pequena, mas agradável, conquista.

Se desejar utilizar o meu esquema muito básico como ponto de partida para criar o seu próprio, pode descarregá-lo aqui: descarregue-o aqui. E diga-me como funciona para si.