Как включить файл в ivy.xml? - PullRequest
6 голосов
/ 19 ноября 2009

У меня довольно большой файл ivy.xml, содержащий несколько конфигураций, которые одинаковы для ряда проектов.

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

Кто-нибудь, кто знает, выполнимо ли это?

РЕДАКТИРОВАТЬ: После некоторых дальнейших размышлений, я думаю, что это не выполнимо нарочно. Файл Ivy должен быть одной связной единицей и не должен содержать ссылок на файлы, только ссылки на другие модули ivy ...

Ответы [ 2 ]

9 голосов
/ 03 декабря 2009

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

    <?xml version="1.0"?>
    <ivy-module version="2.0">
        <info organisation="com.example" module="common-libs"/>
          <configurations>
            <conf name="runtime" transitive="true" visibility="public" />
            <conf name="master" transitive="true" visibility="public" />
            <conf name="compile" transitive="true" visibility="public" />
            <conf name="default" transitive="true" visibility="public" extends="master" />
          </configurations>
          <dependencies>
                <dependency org="oracle" name="ojdbc14_g" rev="10.2.0.3"
 conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/>
                <dependency org="tomcat" name="servlet-api" rev="6.0.16" 
 conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/>
                <dependency org="junit" name="junit" rev="4.3"
 conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/>
          </dependencies>
    </ivy-module>

А для типичного проекта:

<?xml version="1.0"?>
    <ivy-module version="2.0">
    <info organisation="com.example" module="myproject"/>
      <configurations>
        <conf name="runtime" transitive="true" visibility="public" />
        <conf name="master" transitive="true" visibility="public" extends="runtime"/>
        <conf name="compile" transitive="true" visibility="public" />
        <conf name="default" transitive="true" visibility="public" extends="master" />
      </configurations>
      <dependencies>
        <dependency org="com.example" name="common-libs" rev="latest.release" 
          conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/>
      </dependencies>
    </ivy-module>

Здесь я использую традиционные соглашения о присвоении имен конфигурации из переводов POM-> Ivy распознавателя Maven, хотя вы можете сопоставить имена конфигурации любым удобным для вас способом. Я обычно использую задачу ivy: install для копирования модулей Maven в наш репозиторий Ivy, поэтому я по большей части использую ivy.xmls по умолчанию. Если вы используете IvyRoundup, вам, прежде всего, потребуется отобразить конфигурацию «по умолчанию» транзитивно.

2 голосов
/ 20 ноября 2009

Если вы используете ivy из ant и используете Ant 1.6 или новее, вы можете использовать задачу <import>, чтобы включить фрагменты файла сборки в файл сборки ant. Указанные файлы должны быть полными файлами сборки Ant, однако:

<?xml version="1.0"?>
<project name="my-project" default="usage" basedir=".">
  <target name="setup">
    ...
  </target>

  <import file="./common.xml"/>
  ...
</project>

Вы также можете использовать стандартный синтаксис XML из файла ivy.xml или build.xml:

<?xml version="1.0"?>
<!DOCTYPE project [
       <!ENTITY common SYSTEM "common.xml">
]>
<project name="my-project" default="usage" basedir=".">
  <target name="setup">
    ...
  </target>

  &common;
  ...    
</project>

Это будет буквально включать в себя содержимое common.xml, в которое вы поместили &common; сущность.

(Имя файла common.xml в этом примере разрешается синтаксическим анализатором XML относительно содержащего XML-файла. Вы также можете использовать абсолютный URI протокола file:.)

...