Esecuzione mediante programmazione di file di generazione Ant

Il supporto Ant incorporato in Eclipse consente ai plugin di eseguire mediante programmazione i file di generazione Ant. Questa operazione viene eseguita mediante la classe AntRunner inclusa nel plugin org.eclipse.ant.core.

Il seguente frammento di codice mostra un esempio di come utilizzare AntRunner dal codice di un altro plugin:

import org.eclipse.ant.core.AntRunner;
import org.eclipse.core.runtime.IProgressMonitor;

...

public void runBuild() {
	IProgressMonitor monitor = ...
	AntRunner runner = new AntRunner();
	runner.setBuildFileLocation("c:/buildfiles/build.xml");
	runner.setArguments("-Dmessage=Building -verbose");
	runner.run(monitor);
}

Se viene utilizzato un controllo di avanzamento, questo è reso disponibile per le attività in esecuzione. Per ulteriori dettagli, vedere Controlli di avanzamento.

Solo una generazione Ant può essere eseguita in un determinato momento, se le generazioni non vengono eseguite in VM diverse. Vedere AntRunner.isBuildRunning();

Un'attenzione particolare deve essere rivolta alle librerie native, se la generazione si verifica all'interno dello stesso JRE dello spazio di lavoro

Ogni volta che un file di generazione Ant viene eseguito in Eclipse, viene creato un nuovo caricatore classi. Dal momento che in Java una libreria può essere caricata solo da un caricatore classi, le attività che fanno uso di librerie native potrebbero incorrere in problemi durante le esecuzioni di più file di generazione. Se il precedente caricatore classinon è stato sottoposto a garbage collection quando il nuovo caricatore classi tenta di caricare la libreria nativa, viene generata un'eccezione per segnalare il problema e l'esecuzione della generazione avrà esito negativo. Uno dei modi per evitare il problema consiste nel fare in modo che il caricamento di librerie venga gestito da una classe all'interno di una libreria di plugin. L'attività può fare uso della classe in questione per accedere ai metodi nativi. In questo modo, la libreria viene caricata dal caricatore classi del plugin e non incorre in problemi di conflitto con il caricamento della libreria.