Плющ и Снимки (Нексус) - PullRequest
4 голосов
/ 07 июня 2010

Я использую менеджер репозитория ant, ivy и nexus для создания и хранения своих артефактов. Мне удалось заставить все работать: разрешение зависимостей и публикацию. Пока я не столкнулся с проблемой ... (конечно!).

Я публиковал репозиторий «релиз» в Nexus, который заблокирован, чтобы «отключить повторное развертывание» (даже если вы измените настройку на «разрешить повторное развертывание» (действительно, там imo) получал, когда мои изменения не обновлялись через репозиторий, прежде чем я понял, что это происходит.

В любом случае, теперь мне нужно все переключить, чтобы использовать репозиторий «Снимок» в Nexus. Проблема в том, что это портит мою публикацию. Я пробовал разные вещи, в том числе всесторонний поиск в Интернете, и нигде не нашел. Я получаю ошибку - неверный запрос PUT, код ошибки 400.

Может ли кто-нибудь, у кого это работает, дать мне указатель на то, что мне не хватает.

Большое спасибо,

Алистер

Кстати, вот мой конфиг:

Обратите внимание, что я удалил все попытки заставить работать моментальные снимки, так как я не знал, что на самом деле (потенциально) полезно, а что - полная болтовня. Поэтому это рабочая настройка только для релиза.

Также обратите внимание, что я добавил XXX-API ivy.xml только для информации. Я даже не могу опубликовать xxx-common (и у него даже нет зависимостей).

Задача муравья:

<target name="publish" depends="init-publish">

  <property name="project.generated.ivy.file" value="${project.artifact.dir}/ivy.xml"/>
  <property name="project.pom.file" value="${project.artifact.dir}/${project.handle}.pom"/>

  <echo message="Artifact dir: ${project.artifact.dir}"/>
  <ivy:deliver 
    deliverpattern="${project.generated.ivy.file}" 
    organisation="${project.organisation}" 
    module="${project.artifact}" 
    status="integration" 
    revision="${project.revision}" 
    pubrevision="${project.revision}" /> 

  <ivy:resolve  />

  <ivy:makepom 
    ivyfile="${project.generated.ivy.file}" 
    pomfile="${project.pom.file}"/>

  <ivy:publish 
     resolver="${ivy.omnicache.publisher}" 
     module="${project.artifact}"
     organisation="${project.organisation}"
     revision="${project.revision}"
     pubrevision="${project.revision}"
     pubdate="now" 
     overwrite="true"  
     publishivy="true" 
     status="integration"
     artifactspattern="${project.artifact.dir}/[artifact]-[revision](-[classifier]).[ext]" 
     />


 </target> 

Пара файлов плюща, чтобы дать представление о внутренних зависимостях:

XXX-Общий проект:

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
    <info
        organisation="com.myorg.xxx"
        module="xxx_common"
        status="integration"
        revision="1.0">
 </info>
 <publications>  
     <artifact name="xxx_common" type="jar" ext="jar"/>  
     <artifact name="xxx_common" type="pom" ext="pom"/>       
 </publications>  
    <dependencies>
    </dependencies>
</ivy-module>

Проект XXX-API:

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
    <info
        organisation="com.myorg.xxx"
        module="xxx_api"
        status="integration"
        revision="1.0">
 </info>
 <publications>  
     <artifact name="xxx_api" type="jar" ext="jar"/>  
     <artifact name="xxx_api" type="pom" ext="pom"/>       
 </publications>  
    <dependencies> 
        <dependency org="com.myorg.xxx" name="xxx_common" rev="1.0" transitive="true" />
    </dependencies>
</ivy-module>

IVY Settings.xml:

<ivysettings>

 <properties file="${ivy.project.dir}/project.properties" />


 <settings
  defaultResolver="chain" 
  defaultConflictManager="all" />

 <credentials host="${ivy.credentials.host}" realm="Sonatype Nexus Repository Manager" username="${ivy.credentials.username}" passwd="${ivy.credentials.passwd}" />  

 <caches>
   <cache name="ivy.cache" basedir="${ivy.cache.dir}" />
 </caches> 

 <resolvers>
  <ibiblio name="xxx_publisher" m2compatible="true" root="${ivy.xxx.publish.url}" />
  <chain name="chain">
   <url name="xxx">  
    <ivy pattern="${ivy.xxx.repo.url}/com/myorg/xxx/[module]/[revision]/ivy-[revision].xml" />  
    <artifact pattern="${ivy.xxx.repo.url}/com/myorg/xxx/[module]/[revision]/[artifact]-[revision].[ext]" /> 
   </url>         
   <ibiblio name="xxx" m2compatible="true" root="${ivy.xxx.repo.url}"/>
   <ibiblio name="public" m2compatible="true" root="${ivy.master.repo.url}" />      
   <url name="com.springsource.repository.bundles.release">  
    <ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />  
    <artifact pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" /> 
   </url> 
   <url name="com.springsource.repository.bundles.external">  
    <ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />  
    <artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" /> 
   </url> 
  </chain>
 </resolvers>



</ivysettings>

Ответы [ 3 ]

3 голосов
/ 07 июня 2010

w00h00t.

(Есть что-то катарсное в обращении к миру за помощью. Обычно вы решаете проблему намного быстрее, даже без ответа).на пару вещей:

a) добавление -SNAPSHOT ко всем ревизиям.Это включало разветвление второго ivy.xml -> ivy.SNAPSHOT.xml и явную ссылку на него в задачах ivy ant.б) учитывая, что это ручное дополнение, мне пришлось пройтись по всему дереву файлов сборки и указать параллельные пути для потоков выпуска и моментальных снимков.Это, на мой взгляд, хромает.Но, как я полагаю, мы вряд ли изобрели какой-либо другой тип потока, он, вероятно, не будет раздутым, и 2 параллельных потока - это то место, где он будет оставаться.в) Я указал различные подсказки плющу, чтобы проверить наличие обновлений снимков.например, checkUpdated="true" и changePattern=".*-SNAPSHOT" на резольвере.И добавление

<modules org="myorg" name=*" resolveMode="dynamic" />

Тем не менее, было бы неплохо, если бы была автоматическая интеграция со снимками. бит (необязательно) сообразительности со стороны плюща.Посмотрим правде в глаза, репозитории maven, такие как nexus, действительно полезны, и я, конечно, использую ivy только для того, чтобы обойти дурацкий процесс сборки maven.Мне нравится с использованием нексуса.

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

1 голос
/ 13 января 2012

Я не уверен, поможет ли это с проблемой наличия 2 наборов конфигураций, но по крайней мере build.xml будет немного проще.

Вы можете определить атрибут revision вЭлемент info в ivy.xml как $ {project.revision}.

Затем можно пропустить атрибуты revision = "$ {project.revision}" для элементов ivy в build.xml.

Смотрите мой ответ на этот другой вопрос, например: https://stackoverflow.com/a/8853823/1148030

0 голосов
/ 18 декабря 2013

Следует отметить, что единственный необходимый шаг - включить '-SNAPSHOT' в ревизию при публикации в Nexus. Другие шаги, перечисленные в ответе, являются необязательными / улучшены. Чтобы вытащить опубликованный элемент вниз, вам также необходимо добавить '-SNAPSHOT' к ревизии.

...