Мои файлы JAR должны быть подписаны для webstart приложения. Было бы хорошо также упаковать их для уменьшения времени загрузки. Я пытаюсь настроить задачу Ant, чтобы автоматически сделать это во время развертывания приложения. Так как процесс пакета реорганизовывает банку внутренняя структура, делающая недействительным подпись, документация Pack200 рекомендует 3 процесса шагов:
У муравья есть значение по умолчанию signjar задача, и Sun опубликовал задачу Ant Pack200.
Проблема состоит в том, что задача Sun pack200 просто воздействует на один файл за один раз, и операция переупаковки должна указать выходной файл.
Я полагаю, что это должна быть довольно общая операция, но мой файл муравья становится чрезмерно сложным и существует слишком много временных файлов. Время для просьбы о мудрости сообщества:
Существует ли легкое или, по крайней мере, стандартный способ упаковать и подписать все мои файлы JAR?
Вот мое собственное решение. Я отказался от prebuild ant target и решил запустить исполняемый файл pack200 напрямую.
Этот подход имеет некоторые преимущества:
Вот код макроса, который переупаковывает и подписывает встроенные:
<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}" />
Затем следуйте за ним тегом сверху. Это сделает окончательную упаковку для каждого файла.
Вы можете использовать набор файлов в задаче signjar
<signjar alias="ws" keypass="wskey"
storepass="wspass" keystore="${artifact.root.dir}/deployJAWS.key">
<fileset dir="${lib.temp.root.dir}">
<include name="**/*.jar" />
</fileset>
</signjar>
Я использую приведенный выше фрагмент для подписи моего приложения WebStart, состоящего примерно из 70 банок