Автоматизировать увеличение ревизии плюща для всех моих проектов, используя скрипт Ant - PullRequest
1 голос
/ 05 декабря 2011

У меня есть 20 проектов ivy из 50 других проектов (принадлежащих другим), я использую некоторые версии их двоичных файлов в своих проектах.

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

шаги по автоматизации с помощью ant:

1) извлекайте только файлы ivy.2) использование скриптов / логики для изменения версии только зависимости моих модулей / моих модулей друг от друга.3) проверить в файлах.4) пометить ветку для выпуска.

Застрявшие на шаге 2, остальные все относительно легки.

Пробная задача XML, но сталкивается с трудностями при поиске, поскольку мы не знаем точный индекс несколько раз.

Ценю вашу помощь.

Ответы [ 3 ]

3 голосов
/ 06 декабря 2011

Рассматривали ли вы использование номеров динамических ревизий в ваших файлах ivy?

<dependency org="myorg" name="myname1" revision="latest.release"/>
<dependency org="myorg" name="myname2" revision="latest.integration"/>

Ivy будет умно разрешать эти зависимости в файле ivy.xml, который публикуется в репозиториях ivy.

Использование ivy для создания номера сборки

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

Управление порядком сборки

Еще один мультимодульный совет ivy - использовать задачу buildlist для управления порядком сборки ваших модулей.Он работает на основе взаимозависимостей, объявленных в файлах ivy каждого подмодуля.Это гарантирует, что ревизии latest.release и latest.integration найдут ожидаемую ревизию.

Разрешение динамических ревизий

Как ясказал, что обычно это делается автоматически, но иногда вам нужно будет увидеть реальные используемые версии, например, при создании POM-файла Maven (при публикации в репозиторий Maven).

В следующих примерах используется плющЗадачи поставка и makepom для создания POM Maven с расширенными динамическими ревизиями.

<target name="generate-pom">
    <ivy:deliver deliverpattern="${build.dir}/ivy.xml" pubrevision="${publish.revision}" status="${publish.status}"/>
    <ivy:makepom ivyfile="${build.dir}/ivy.xml" pomfile="${build.dir}/${ivy.module}.pom"/>
</target>

<target name="publish" depends="build,generate-pom">
    <ivy:publish resolver="${publish.resolver}" pubrevision="${publish.revision}" overwrite="true" publishivy="false" >
        <artifacts pattern="${build.dir}/[artifact](-[classifier]).[ext]"/>
    </ivy:publish>
</target>
1 голос
/ 05 декабря 2011

Если вы всегда хотите использовать последнюю версию, задумывались ли вы об использовании диапазонов версий в зависимостях ? Больше не нужно будет редактировать файлы для нового выпуска. Для ядра пружины это будет выглядеть следующим образом:

<dependency org="org.springframework" name="spring-core" rev="[2.5,4.0[" conf="optional->default"/>
0 голосов
/ 14 февраля 2012

Сам нашел следующее работоспособное решение, хотя попробовал другие варианты, такие как разбор ivy.xml через IVY java и т. Д.

<target name="autoincrementivy" depends="prompt-user.password">
    <exec executable="svn" failonerror="${svn.failonerror}">
        <arg value="--non-interactive"/>
        <arg value="--trust-server-cert"/>
        <arg value="--username"/>
        <arg value="${svn.user}"/>
        <arg value="--password"/>
        <arg value="${svn.password}"/>
        <arg value="checkout"/>
        <arg value="--depth"/>
        **<arg value="immediates"/>**
        <arg value="${svn.repository}/@{module.name}/trunk"/>
         <arg value="${temp.checkout.dir}/@{module.name}"/>
    </exec>
<move file="${temp.checkout.dir}/ivy.xml" tofile="${temp.checkout.dir}/ivy_src.xml"/>
<ant target="changeVersion" antfile="../deploy.xml" >
   <property name="dest.file" value="${temp.checkout.dir}/ivy.xml"/>
  <property name="src.file" value="${temp.checkout.dir}/ivy_src.xml"/>
  <property name="target.version" value="${tag.version}"/>
</ant>
<!-- cehckin the file-->
</target>

Выше задача извлечения файла во временную папку с папкой .svn, чтобы cehckin работал правильно.

    <target name="changeVersion">

    <xmltask source="${src.file}" dest="${dest.file}" preserveType="true" >
        <replace path="/ivy-module/info/@revision" withText="${target.version}" />
        <replace path="/ivy-module/dependencies/dependency[@name='my-common']/@rev"       withText="${target.version}" /> 
<replace path="/ivy-module/dependencies/dependency[@name='my-gui-common']/@rev" withText="${target.version}" /> 
        </xmltask>  
        <fixcrlf file="${src.file}" eol="cr" />
    </target>

Вышеуказанная цель для разбора и изменения версии.

...