Как мне скопировать файлы в существующий JAR с Ant? - PullRequest
20 голосов
/ 06 февраля 2009

У меня есть проект, которому нужен доступ к ресурсам в его собственном JAR-файле. Когда я создаю файл JAR для проекта, я хотел бы скопировать каталог в этот файл JAR (я полагаю, что эквивалентом ZIP будет «добавление» каталога в существующий файл ZIP). Я хочу, чтобы копия происходила только после создания JAR-файла (и, очевидно, я не хочу, чтобы копия происходила, если я очищаю и удаляю файл JAR).

В настоящее время файл сборки выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<project name="foobar" basedir=".." default="jar">

    <!-- project-specific properties -->
    <property name="project.path" value="my/project/dir/foobar" />

    <patternset id="project.include">
        <include name="${project.path}/**" />
    </patternset>
    <patternset id="project.jar.include">
        <include name="${project.path}/**" />
    </patternset>

    <import file="common-tasks.xml" />

    <property name="jar.file" location="${test.dir}/foobar.jar" />    
    <property name="manifest.file" location="misc/foobar.manifest" />
</project>

Некоторые задачи сборки вызываются из другого файла (common-tasks.xml), который я не могу отобразить здесь.

Ответы [ 3 ]

17 голосов
/ 06 февраля 2009
<jar update="true">
...
</jar>
13 голосов
/ 06 февраля 2009

Задачи Jar / Ear Ant являются подзадачами более общей задачи Zip . Это означает, что вы также можете использовать zipfileset в своем задании Jar:

<jar destfile="${jar.file}" basedir="...">
    <zipfileset dir="${project.path}" includes="*.jar" prefix="libs"/>
</jar>

Я также видел, что вы определяете отдельный файл манифеста для включения в Jar. Вы также можете использовать вложенную команду manifest:

<jar destfile="@{destfile}" basedir="@{basedir}">
    <manifest>
        <attribute name="Built-By" value="..."/>
        <attribute name="Built-Date" value="..."/>

        <attribute name="Implementation-Title" value="..."/>
        <attribute name="Implementation-Version" value="..."/>
        <attribute name="Implementation-Vendor" value="..."/>
    </manifest>
</jar>
4 голосов
/ 06 февраля 2009

Один из способов - использовать задачи Ant:

  1. Разархивировать - взорвать банку - это временная папка
  2. Копировать - скопировать нужную папку во временную папку и
  3. Jar - с параметром update для true, чтобы упаковать временную папку обратно в исходный файл jar.

Муравей Руководство содержит примеры того, как это сделать.

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