Вот мое собственное решение.Я отказался от предварительной сборки ant target и решил запустить непосредственно исполняемый файл pack200.
У этого подхода есть некоторые преимущества:
- работает (jarsigner не смог проверить некоторые jar-файлы)
- нет зависимостей, кроме jdk
- itне тратит много времени на перепаковку уже перепакованных jar-файлов
- , он может подписывать и перепаковывать встроенные файлы, что позволяет мне поставить подписанную версию под контроль версий.Нет необходимости подписывать дважды.
Вот код макроса, который перепаковывает и подписывает встроенный код:
<macrodef name="repack-and-sign">
<attribute name ="rootdir"/>
<sequential>
<echo message="Repacking libs in @{rootdir}"/>
<apply executable="pack200" parallel="false">
<arg value="--repack"/>
<arg value="--segment-limit=-1"/>
<fileset dir="@{rootdir}" includes="**/*.jar" />
</apply>
<echo message="Signing libs in @{rootdir}"/>
<signjar
alias="${keystore.alias}" keystore="${keystore.file}" storepass="${keystore.password}"
lazy="true">
<path>
<fileset dir="@{rootdir}" includes="**/*.jar" />
</path>
</signjar>
</sequential>
</macrodef>
А вот как упаковать:
<apply executable="pack200" parallel="false" dest="${dir.tomcat.jar}">
<arg value="--modification-time=latest"/>
<arg value="--deflate-hint=true"/>
<arg value="--segment-limit=-1"/>
<targetfile/>
<srcfile/>
<fileset dir="${dir.tomcat.jar}" includes="**/*.jar" />
<mapper type="glob" from="*" to="*.pack.gz" />
</apply>
Отредактировано, чтобы предоставить немного больше информации людям, которые не очень хорошо знают муравья:
Вышеуказанная задача идет перед вашими тегами.Внутри вашего тега сначала поместите вызов в макрос, как этот, чтобы он сначала перепаковывал и подписывал каждый файл:
<repack-and-sign rootdir="${dir.tomcat.jar}" />
Затем следуйте этому метке сверху.Это сделает окончательную упаковку для каждого файла.