Использование ant для создания распространяемого zip-файла с JAR, библиотеками и документами - PullRequest
1 голос
/ 27 апреля 2011

У меня есть библиотека, которая обычно распространяется путем создания zip-файла JAR и его зависимостей и его javadoc вручную.Я хотел бы автоматизировать эту задачу в ant.

Одна из особенностей предполагаемого варианта использования этого дистрибутива заключается в том, что при распаковке JAR, созданный моей командой, и все библиотечные JAR-файлы должны находиться по одному пути,У нас не может быть myproject.zip/the.jar и myproject.zip/lib/a_library.jar, оба должны быть в корневом пути zip.

Я добился большого успеха, выполнив следующую задачу:

<target name="myproject.distributable" depends="artifact.mycompany_myproject, myproject.javadoc"
            description="Build the distributable JAR for myproject">
        <zip destfile="${basedir}/dist/myproject.zip">
            <fileset file="${temp.jar.path.mycompany_myproject.jar}"/>
            <zipfileset dir="mycompany_myproject/lib" prefix="lib">
                <patternset id="myproject.dist.libs">
                    <include name ="**/*.jar"/>
                </patternset>
            </zipfileset>
            <zipfileset dir="docs/myproject" prefix="docs"/>
        </zip>
    </target>

Единственное, что этоне «выравнивает» или перемещает библиотечные JAR-файлы в корневой каталог zip.

Я пытался использовать <zipfileset prefix="/"> для библиотек, но это не сработало, как ожидалось.

Ответы [ 2 ]

7 голосов
/ 27 апреля 2011

Атрибут prefix zipfileset используется для описания того, где файлы должны появляться в созданном zip-файле. Поскольку вы хотите, чтобы файлы jar появлялись в корне zip-файла, вам не нужно указывать это, и вы можете не указывать его (я не уверен, каков будет результат установки его в «/», я думаю, безопаснее будет его опустить).

Похоже, ваша проблема в том, что ваши библиотеки хранятся в подкаталогах под вашим каталогом lib, но вы хотите, чтобы они находились непосредственно в корне zip-файла. Задача 'zip', в отличие от задачи copy, не принимает маппер напрямую, чтобы изменить способ отображения файлов в zip, но если вы используете ant 1.7 или более позднюю версию, он примет коллекцию ресурсов 1008 *. Вы можете использовать элемент mappedresources с fileset и flattenmapper, чтобы получить нужный эффект:

<target name="myproject.distributable" depends="artifact.mycompany_myproject, myproject.javadoc" description="Build the distributable JAR for myproject">
  <zip destfile="${basedir}/dist/myproject.zip">
    <fileset file="${temp.jar.path.mycompany_myproject.jar}"/>
    <mappedresources>
      <fileset dir="mycompany_myproject/lib" includes="**/*.jar" />
      <flattenmapper />
    </mappedresources>
    <zipfileset dir="docs/myproject" prefix="docs"/>
  </zip>
</target>

Это означает, что вам не нужно сначала использовать copy, чтобы поместить банки в зону подготовки.

0 голосов
/ 27 апреля 2011

Согласно этот пост zipgroupfileset должен сделать свое дело; Я сам не пробовал ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...