Quindi, ecco la situazione: ho un file di generazione padre che definisce un'attività di compilazione e voglio che i file di build figlio possano facoltativamente aggiungere altri JAR (che potrebbero essere ovunque) sul classpath usato da quell'attività di compilazione.Creazione di un set di file segnaposto vuoto in Ant
Non tutti i file di build figlio avranno queste dipendenze aggiuntive, quindi non voglio forzarli a definire il set di file di dipendenza aggiuntivo. Dovrebbero essere in grado di includere il genitore e l'attività di compilazione dovrebbe funzionare.
(Ovviamente ci sono altre proprietà necessarie che configurano la directory di origine e così via, ma non entrano in questa. Inoltre, il problema di inclusione/ereditarietà è un po 'più complicato, ma spero che sia la cosa giusta è per il caso semplice funzionerà nel caso complesso troppo)
ho qualcosa che funziona. il compito di compilazione nella BuildFile genitore si riferisce alla ulteriore set di file di dipendenza a prescindere:
<target name="compile" depends="init-additional-dependencies">
<fileset id="global.dependency.fileset" dir="${global.library.directory}">
<include name="**/*.jar"/>
</fileset>
<javac ...>
<classpath>
<!-- should be the same for all buildfiles -->
<fileset refid="global.dependency.fileset"/>
<!-- should be populated by child buildfiles -->
<fileset refid="additional.dependency.fileset"/>
</classpath>
</javac>
</target>
... e il buildfile padre ha anche un'attività che crea questo set di file, vuoto, in modo che javac non esploda. Tuttavia, il modo in cui sto creando il set di file vuoto è stupida:
<target name="init-additional-dependencies">
<!-- override me! -->
<fileset id="additional.dependency.fileset" dir=".">
<include name="placeholder.does.not.exist.so.fileset.is.empty"/>
</fileset>
</target>
Questo funziona, ma sembra muto, ed è difficile credere che non ci sia un approccio migliore. Qual è l'approccio migliore?
Molto interessante domanda +1 . Il problema è che il tuo dirset usa "." che esistono sempre. Se hai un qualche tipo sulla convenzione di denominazione su dove tenere i jar di dipendenza aggiuntivi (ad esempio ./deps/), potresti creare dirset con 'erroronmissingdir = false'. – Jayan