Quando seu plug-in contribui com tarefas e tipos Ant, as tarefas e os tipos possuem acesso a todas as classes dentro do plug-in de contribuição. Por exemplo, a tarefa eclipse.refreshLocal com a qual o plug-in org.eclipse.core.resources contribui é um reinício cíclico para o método IResource.refreshLocal().
As tarefas e os tipos com os quais os plug-ins contribuem não devem ser colocados em nenhuma das bibliotecas de plug-ins. Eles devem ficar em um JAR separado. Isso significa que as classes de plug-in não possuem acesso às tarefas e aos tipos fornecidos pelo plug-in. (Consulte Por que um JAR Separado para Tarefas e Tipos? para obter mais informações.)
O ponto de extensão org.eclipse.ant.core.antTasks fornece um exemplo de como especificar uma nova tarefa no arquivo plugin.xml.
O suporte Ant do Eclipse Ant fornece acesso a um IProgressMonitor se algum for transmitido ao chamar o AntRunner. Uma das vantagens de se ter acesso a um monitor de progresso é que uma tarefa de longa execução pode verificar se o usuário solicitou cancelamento. O objeto do monitor de progresso é obtido das referências do projeto Ant. Observe que um monitor é disponibilizado apenas se o método AntRunner.run(IProgressMonitor) foi chamado com um monitor de progresso válido. O trecho de código a seguir mostra como obter um monitor de progresso do projeto da tarefa:
import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; import org.eclipse.ant.core.AntCorePlugin; import org.eclipse.core.runtime.IProgressMonitor; public class CoolTask extends Task { public void execute() throws BuildException { IProgressMonitor monitor = (IProgressMonitor) getProject().getReferences().get(AntCorePlugin.ECLIPSE_PROGRESS_MONITOR); if (monitor == null) { ... } else { ... } } }
Os seguintes itens deverão funcionar como uma lista de verificação para desenvolvedores de plug-in:
Basicamente, há dois requisitos para a execução de Ant no Eclipse que não se adaptam muito bem ao modelo do plug-in:
Durante o tempo de execução, os carregadores de classe do plug-in não podem ter seus classpaths expandidos e os plug-ins não podem alterar suas dependências. Ao mesmo tempo, ter JARs separados para as tarefas e os tipos é um bom isolamento do mecanismo de carregamento de classe do plug-in. Ter esses JARs extras declarados por um plug-in permite também adicionar o plug-in de contribuição ao classpath do Ant.