Это моё решение заменить существующие файлы в zip (.war) файлах. Исходное состояние: у меня есть build.xml для компиляции и упаковки mywebapp.war для сервера Tomcat6. Для сервера Tomcat7 требуются незначительные изменения конфигурации в файле war.
- Проектные подпапки web и webT7 являются папками, управляемыми CVS, я не хочу трогать метки времени без причины. Следующая уловка делает работу.
- скомпилируйте и создайте файл web / WEB-INF / lib / mywebapp.jar как обычно
- target "war" создает архив tomcat6 из веб-папки
- имеет несколько определенных файлов в подпапке webT7, таких как META-INF / context.xml и WEB-INF / web.xml, которые мне нужно немного изменить для каждой версии tomcat.
- создать копию файла mywebapp.war.zip
- копировать файлы из подпапки webT7 в новую временную папку сборки, не используйте preservelastmodified атрибут !!! Это дает новую временную метку для каждого файла, поэтому ее касания без отдельной команды прикосновения.
- Отказоустойчивое прикосновение к новому zip, чтобы поставить метку времени в прошлом, это гарантирует, что обновление zip работает правильно.
- используйте задачу zip для обновления содержимого mywebapp.war_T7.zip, оно должно заменить существующие файлы, потому что мы скопировали их без сохранения оригинальных временных меток.
Причина, по которой я копирую содержимое webT7 в папку временного компоновки, - системы управления контентом. Я не хочу менять временные метки исходных файлов репозитория без причины. Все остальное компилируется, фляга, военные цели всегда одинаковы, независимо от того, какую цель Tomcat я использую.
Zip update = "true" атрибут, как было сказано ранее, не заменяет файлы, он обновляется только в том случае, если zip имел более старый файл, чем тот, который мы дали. Это может создать проблемы, если у меня есть файлы web / config.jsp (2013-01-21 14:01:01) и webT7 / config.jsp (2012-12-21 15:02:03). Файл не был заменен.
Фрагмент из файла build.xml
<target name="war" depends="compile,jar" description="Create a .war file">
<delete file="${name}.war.zip" />
<zip destfile="${name}.war.zip"
basedir="./web/"
excludes="
**/CVS*
"
/>
</target>
<target name="warT7" depends="war" description="Create a .war file for Tomcat7">
<delete dir="${build}" />
<mkdir dir="${build}" />
<delete file="${name}.war_T7.zip" />
<copy file="${name}.war.zip"
tofile="${name}.war_T7.zip" overwrite="true" preservelastmodified="true"
/>
<copy todir="${build}" overwrite="true">
<fileset dir="./webT7" />
</copy>
<touch datetime="01/31/1981 01:00:00 AM" file="${name}.war_T7.zip" />
<zip destfile="${name}.war_T7.zip" update="true">
<zipfileset dir="${build}" prefix="" />
</zip>
<delete dir="${build}" />
</target>