2012-03-22 15 views
5

W naszym artefakcyjnym mamy repozytorium snapshot zdefiniowane do obsługi maksymalnie 5 unikalnych migawek. Dodaliśmy -SNAPSHOT-.extension do nazwy pliku. SNAPSHOT zostanie również przekonwertowany na znacznik czasu. Kompilacja odbywa się za pomocą gradle, a artefakty są publikowane za pomocą wtyczki Bamboo i artefakt.Obsługa artifactory Snapshot

Plik wdrożony do artifactory ...

inhouse-snapshots:com/example/project/subproject/trunk-SNAPSHOT/subproject-trunk-SNAPSHOT-79.amp 

staje ...

inhouse-snapshots:com/example/project/subproject/trunk-SNAPSHOT/subproject-trunk-20120321.154621-1-79.amp 

To jest w porządku, a każdy build dodaje nowy plik z zwiększany numer kompilacji, ale datownik numer zawsze pozostaje 20120321.154621-1 więc mamy listę plików jak:

  • podprojektem opuszczanym-20120321.154621-1-79.amp
  • podprojektem-bagażnik-20120321.154621-1-80.amp
  • podprojektem-bagażnik-20120321.154621-1-81.amp

ktoś ma rozwiązanie lub sugestię o układ innego katalogu?

+0

Ten zamiennik czasowy migawki nie powinien się zdarzyć w Artifactory. Artifactory zastępuje tylko migawki artefaktów wdrożonych do prawidłowej ścieżki Maven (ten przykład nie jest prawidłowy) w repozytorium z domyślnym układem Mavena.Z jakiego układu skonfigurowane jest twoje repozytorium? Czy sam wykonujesz wymianę? – noamt

+0

Układ repozytorium to maven2default i nie wykonałem wymiany migawki. Testowałem powyższe ścieżki za pomocą testera ścieżek w sztucznej konsoli administratora, prawie wszystko jest w porządku, spodziewając się, że numery kompilacji 79, 80, ... są rozpoznawane jako klasyfikatory. Nie jestem pewien, czy to prawda. Przetestowałem również bez numerów kompilacji, w tym przypadku artefakt zostanie nadpisany. Tam oczekiwałbym drugiego pliku z nowym znacznikiem czasu i -2 ... na końcu znacznika czasu. –

+0

Och właśnie rozpoznałem mój błąd ponad tym, który powoduje nieważną ścieżkę maven2, naprawiłem to. Przepraszam –

Odpowiedz

9

Jak poprawnie zauważyłeś, numer kompilacji dołączony do nazwy pliku wdrożonego jest identyfikowany jako klasyfikator; to dlatego, że Maven nie określa numeru kompilacji z nieunikatową migawką.

Artifactory utrzymuje tę samą kombinację znacznika czasu i numeru kompilacji dla "partii" artefaktów i "potłukuje" znacznik czasu i numer kompilacji, gdy wykryje nową "partię"; są 2 sposoby Artifactory wykrywa artefaktów „partii” dla celów konwersji nieunikalny unikalnym migawek:

  1. artefakty są rozmieszczone dokładnie w kolejności: artefaktu (bez klasyfikatora), POM, dołączony artefaktów (z klasyfikatorami); Pierwszy zwykły artefakt, który zostanie wdrożony po POM, utworzy nową "partię"; stąd nowy znacznik czasu i numer konstruktora.

  2. Artefakty rozmieszczone z matrix param klucza „build.timestamp” i wartość milisekundy opartych epoki datownik; Artefakty o takich samych wartościach znacznika czasu będą powiązane w ramach tej samej "partii".

Należy też pominąć numer kompilacji z wdrożonej pliku i wdrożyć go z „build.timestamp” param macierzy (aby Artifactory odkopanie „partia” na każdego nowego rozmieszczenia) lub wdrożyć pliki już z unikalną migawką.

+1

Tak, thx. Wdrażanie plików z unikatowym znacznikiem czasu zamiast SNAPSHOT sprawia, że ​​auto migawka działa poprawnie. –

0

Opublikowałem to rozwiązanie: https://discuss.gradle.org/t/2-8-2-9-mavendeployer-doesnt-honour-uniqueversion-false-in-maven-uploadarchives/13370/8 Problem, który miałem, to wiele publikacji w dziale publikacji. Rozwiązaniem było dla mnie dodanie dodatkowych artefaktów do jednej publikacji. Następnie wszystkie elementy, jar api, jar źródłowy, jar źródłowy api i główny jar mają ten sam znacznik czasu dla SNAPSHOT. Wydaje się, że automatycznie zajmuje się dla mnie plikiem build.timestamp.

task apiJar(type: Jar) { 
    classifier = 'api' 
    from(sourceSets.main.output) { 
     include "com/company/app/dto/**" 
    } 
} 

task sourceJar(type: Jar, dependsOn: classes) { 
    classifier = 'sources' 
    from sourceSets.main.allSource 
} 

task apiSourceJar(type: Jar, dependsOn: classes) { 
    classifier = 'api-sources' 
    from(sourceSets.main.allSource) { 
     include "com/company/app/dto/**" 
    } 
} 

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java 
      pom.withXml { 
       asNode().appendNode('description', 'APP Sprint Boot App') 
      } 
      artifact apiJar 
      artifact sourceJar 
      artifact apiSourceJar 
     } 
    } 
    repositories { 
     maven { 
      credentials { 
       username = 'username' 
       password = 'password' 
      } 
      if(project.version.endsWith('-SNAPSHOT')) { 
       url "http://server:9081/artifactory/libs-snapshot-local" 
      } else { 
       url "http://server:9081/artifactory/libs-release-local" 
      } 
     } 
    } 
} 
Powiązane problemy