Как сделать задачу Ant для подписания и pack200 все мои файлы JAR?

Мои файлы JAR должны быть подписаны для webstart приложения. Было бы хорошо также упаковать их для уменьшения времени загрузки. Я пытаюсь настроить задачу Ant, чтобы автоматически сделать это во время развертывания приложения. Так как процесс пакета реорганизовывает банку внутренняя структура, делающая недействительным подпись, документация Pack200 рекомендует 3 процесса шагов:

  1. Переупакуйте JAR с pack200
  2. Подпишите JAR с jarsigner
  3. Сожмите банку JAR с pack200, генерирующим .jar.pack.gz файл

У муравья есть значение по умолчанию signjar задача, и Sun опубликовал задачу Ant Pack200.

Проблема состоит в том, что задача Sun pack200 просто воздействует на один файл за один раз, и операция переупаковки должна указать выходной файл.

Я полагаю, что это должна быть довольно общая операция, но мой файл муравья становится чрезмерно сложным и существует слишком много временных файлов. Время для просьбы о мудрости сообщества:

Существует ли легкое или, по крайней мере, стандартный способ упаковать и подписать все мои файлы JAR?

9
задан Bala 29 January 2013 в 09:07
поделиться

2 ответа

Вот мое собственное решение. Я отказался от prebuild ant target и решил запустить исполняемый файл pack200 напрямую.

Этот подход имеет некоторые преимущества:

  • он работает (jarsigner не смог проверить некоторые jar-файлы)
  • никаких зависимостей, кроме jdk
  • , он не тратит много времени на переупаковку уже перепакованных 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}" />

Затем следуйте за ним тегом сверху. Это сделает окончательную упаковку для каждого файла.

10
ответ дан 4 December 2019 в 19:32
поделиться

Вы можете использовать набор файлов в задаче 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 банок

1
ответ дан 4 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: