Муравей: Как вызвать компиляцию Java, если jar classpath изменился, а источники не изменились - PullRequest
4 голосов
/ 26 декабря 2010


У меня есть следующий сценарий использования:
У меня есть Java-проект (myProj), который использует common.jar из другого проекта (common).Я хочу, чтобы задача javac ant работала, даже если источники myProj не изменились , если изменился файл common.jar (поскольку источники myProj зависят от него и могут быть недействительными сейчас).
Iесть задача, которая копирует файл common.jar из центрального расположения в библиотеку myProj, если он изменился, и я могу использовать его, чтобы установить свойство, принудительно или нет принудительно компилировать, чтобы позаботиться о конце.
Iя не уверен, как (или если) я могу сказать задача javac, чтобы попытаться скомпилировать в любом случае?Я не хочу изменять источники (или временные метки) myProj, чтобы запускать задачу.
Выдержка из файла ant build.xml:

<path id="project.class.path">  
<pathelement location... />  
...  
<fileset dir="lib" includes="**/*.jar" />  
</path>  
<target name="copyLibs" >  
<copy file="${central.loc}/common.jar" todir="lib" />  
...  
</target>  
<target name="javac" >  
<javac srcdir="src" includes="**" excludes=... >  
<classpath refid="project.class.path"/>  
</javac>  
</target>  

Заранее спасибо,
Иттай

1 Ответ

2 голосов
/ 26 декабря 2010

Используйте задачу delete перед javac для очистки старых скомпилированных классов:

В общем случае классы Java не должны перекомпилироваться, если API зависимых классов не изменился.

Также я бы предложил использовать maven, поскольку он обрабатывает зависимости более изящно.

...