Структура хранилища плюща для модуля с несколькими сборками (профилями)? - PullRequest
2 голосов
/ 09 февраля 2012

Я использую Ant и Ivy для управления зависимостями в магазине .NET и добился большого успеха, но не могу найти решение этой проблемы.Мой вопрос касается структуры репозитория для модулей, которые имеют несколько разных профилей (из-за отсутствия лучшего термина).Например, модуль (это сторонняя библиотека - Castle), который я пытаюсь настроить в репозитории, был скомпилирован для разных версий платформы .NET.Этот дистрибутив имеет следующую структуру каталогов:

  • net35 / Castle.Core.dll
  • net40clientprofile / Castle.Core.dll
  • sl3 / Castle.Core.dll
  • sl4 / Castle.Core.dll

Мой файл ivysettings.xml имеет настройку File Resolver следующим образом:

<filesystem name="fs.resolver" cache="nn.repo.cache">
    <ivy pattern="${repository.dir}/[organisation]/[module]/[shortRevision]/[revision]/ivy.xml" />
    <artifact pattern="${repository.dir}/[organisation]/[module]/[shortRevision]/[revision]/[artifact].[ext]" />
</filesystem>

Сначала я подумал о конфигурацииможет быть использовано для этого, но не достигло большого прогресса.Как я могу указать артефакт в файле Ivy.xml с одним и тем же именем более одного раза?Я не думаю, что ты можешь.Кроме того, если я добавлю подкаталоги в репозиторий, придется ли мне модифицировать шаблон артефакта в ivysettings.xml?

Каков рекомендуемый подход с Ivy для настройки этого модуля?Как будет выглядеть файл Ivy.xml для этого модуля?Как для этого нужно изменить файл ivysettings.xml?

Надеюсь, мне не нужно создавать отдельные модули для каждой отдельной компиляции одной и той же версии библиотеки.

Спасибо зааванс за любую помощь.

1 Ответ

3 голосов
/ 10 февраля 2012

В ivy вы можете добавить дополнительные атрибуты к артефактам модуля.

Настройка проекта:

|-- build.xml
|-- ivysettings.xml
|-- ivy.xml
`-- repository
    `-- myorg
        `-- Castle
            `-- 1.0
                |-- ivy.xml
                |-- net35
                |   `-- Castle.Core.dll
                |-- net40clientprofile
                |   `-- Castle.Core.dll
                |-- sl3
                |   `-- Castle.Core.dll
                `-- sl4
                    `-- Castle.Core.dll

ivy.xml

Используйте отображение конфигурации, чтобы выбрать, какой артефакт загрузить:

 <ivy-module version="2.0">
    <info organisation="org.demo" module="demo"/>
    <dependencies>
        <dependency org="myorg" name="Castle" rev="1.0" conf="default->net35"/>
    </dependencies>
</ivy-module>

ivysettings.xml

Шаблон артефакта включает в себя дополнительный атрибут , называемый "профиль"

<ivysettings>
    <settings defaultResolver="local"/>
    <resolvers>
        <filesystem name="local">
            <ivy pattern="${ivy.settings.dir}/repository/[organisation]/[module]/[revision]/ivy.xml" />
            <artifact pattern="${ivy.settings.dir}/repository/[organisation]/[module]/[revision]/[profile]/[artifact].[ext]" />
        </filesystem>
    </resolvers>
</ivysettings>

Репозиторий / MyOrg / Замок / 1,0 / ivy.xml

Дополнительный атрибут "профиль" используется для различения артефактов в модуле. Конфигурации используются для включения сопоставления конфигурации клиентскими модулями.

<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
    <info organisation="myorg" module="Castle" revision="1.0" status="release"/>
    <configurations>
        <conf name="net35"/>
        <conf name="net40clientprofile"/>
        <conf name="sl3"/>
        <conf name="sl4"/>
    </configurations>
    <publications>
        <artifact name="Castle.Core" type="dll" e:profile="net35" conf="net35"/>
        <artifact name="Castle.Core" type="dll" e:profile="net40clientprofile" conf="net40clientprofile"/>
        <artifact name="Castle.Core" type="dll" e:profile="sl3" conf="sl3"/>
        <artifact name="Castle.Core" type="dll" e:profile="sl4" conf="sl4"/>
    </publications>
</ivy-module>
...