Отображение каталогов на имена в Ant - PullRequest
0 голосов
/ 03 марта 2011

Я разворачиваю свои пакеты в отдельных Jar-файлах (один пакет на Jar-файл).Это приводит к менее эффективному сжатию Zip во всем диапазоне Jars, но более эффективно для запуска с использованием Java Web Start при ленивых загрузках и дополнительных обновлениях.

Инструментом сборки является Ant.На данный момент у меня есть отдельный вызов задачи для каждого каталога файлов классов.Это приводит к множеству jar-задач и длинному файлу сборки.Я хотел бы резко сократить его, переместив детали манифеста в отдельный файл в каждом каталоге / пакете и используя задачу foreach (или аналогичную) для Jar каталога, используя манифест, используя «хвост» структуры пакета какНазвание банки.Пакет

EG org/pscode/ui/widget/ должен быть сопоставлен с ui.widget.jar (префикс org.pscode. не требуется).

У меня больше всего проблем с созданием имени файла.


Решено

<target name="start" depends="properties">
    <foreach target="printOut" param="package">
        <path>
            <dirset dir="${src}/java/org/pscode" includes="**/*" />
        </path>
    </foreach>
</target>

<target name="printOut">
    <pathconvert property="prop" dirsep=".">
        <path location="${package}"/>
    </pathconvert>
    <script language="javascript">
        <![CDATA[
            prop1 = projectName.getProperty("prop");
            index = prop1.lastIndexOf("pscode");
            prop2 = prop1.substring(index+7, prop.length);
            projectName.setProperty("prop2", prop2);
        ]]>
    </script>
    <echo message="Package jar name: ${prop2}.jar"/>
</target>

Это приводит к выводу по линиям ..

Buildfile: build.xml

properties:
[pathconvert] org
[pathconvert] pscode
[pathconvert] starzoom
[pathconvert] ui
..
[pathconvert] serialize

start:

printOut:
     [echo] Package jar name: starzoom.jar

printOut:
     [echo] Package jar name: ui.jar
...
printOut:
     [echo] Package jar name: xui.security.serialize.jar

BUILD SUCCESSFUL
Total time: 0 seconds

Tool completed successfully

Фрагмент JavaScript былвдохновленный постом pdeva в теме муравьиные строки: извлечение символов из строки .

1 Ответ

3 голосов
/ 03 марта 2011

Ниже приведена немного скорректированная версия, которая, надеюсь, находится на пути к тому, что вам нужно.

Обратите внимание, что по умолчанию ant-contrib foreach не распространяет свойства на вызываемую цель, поэтому вынеобходимо вставить дополнительное param, чтобы передать значение src.Это значение необходимо для удаления ведущей части пути.

Я добавил образец целевого свойства, чтобы проиллюстрировать, что вы также можете включить полный путь к корневому каталогуСхема именования jar в пути src.

Вы увидите, что задача pathconvert использует переданные значения package и src для построения имени (prop) для jarфайл.Вы должны иметь возможность подготовить задачу jar для выполнения этой работы.

Я заметил, что, поскольку вы указали dirset, вы получите все каталоги в иерархии, которые могутвключайте те без классов.Может не быть проблемой для вас.

<target name="properties">
    <property name="src" location="src/java/org/pscode" />
</target>

<target name="start" depends="properties">
    <foreach target="printOut" param="package">
        <param name="src" value="${src}" />
        <path>
            <dirset dir="${src}" includes="**/*" />
        </path>
    </foreach>
</target>

<target name="printOut">
    <pathconvert property="prop" dirsep=".">
        <path location="${package}"/>
        <map from="${src}/" to=''/>
    </pathconvert>
    <echo message="Package jar name: ${prop}.jar"/>
</target>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...