2013-05-25 22 views
26

Sadece bir Ant + Ivy ve Maven arka planından gelen Gradle'ı öğreniyorum ve başımın uygun bir şekilde yayınlanmasına çalışıyorum. gradle kullanarak yazılım. Projeleri sürekli olarak bağımsız eserler bırakmadan sürekli olarak entegre etmem gerekiyor. Ant + Ivy dünyasında Ant + IvySürekli Entegrasyonu ile Gravürde Anlık Görüntüyü Yayınla Yayınla Yayınla

, ben publishSnapshot ve publishRelease hedefleri oluşturabilirsiniz. Bunların her biri, Nexus'taki ayrı fotoğrafımı çözmek veya yayınlamak ya da yayınları yayınlamak için farklı Ivy çözümleyicileri kullanabilir. Maven ile

Maven

, ben maven benim ayrı fotoğraf yayımlamak veya Nexus depoları serbest olması benim distributionManagement bölümünde snapshotRepository veya repository bir tanımlayabilir.

Gradle

Şimdi gradle girin. Bu aynı işlevselliği nasıl sağlayabilirim? Ivy tarzı depoları kullanıyorum.

Sağladığınız bilgiler için teşekkür ederiz. René cevabı

CEVAP

Teşekkür aşağıda, sonunda çalışılabilir bir çözüm oluşturmak başardı. Konunun özü, tüm projelerimde sürekli olarak entegre olmam gerektiğiydi. Bunu yapmak için latest.integration versiyon numarasını kullanarak bağımlılığı bildirmenin kütüphanelerimin en son sürümünü çekmenin tek yolu olduğunu düşündüm ve bu yüzden sarmaşık havuzlarını kullanmam gerekti. Aslında, yazılımımı tüm projelere sürekli olarak entegre etmek için kütüphanelerin en son sürümlerini kullanmanın başka yolları da vardır. Çözüm, tam olarak aşağıdaki listede olduğu gibi uploadArchives'u kullanmaktır (bunun işe yaraması için apply plugin: 'maven''a ihtiyaç duyacağınızı da unutmayın. Depolarınızın da maven tarzı olduğundan emin olun ve bağımlılık bildirirken, here gösterildiği gibi dinamik sürüm numaralarını kullanabilirsiniz. Benim durumumda, common.gradle ve alt proje projelerinde global bir sürüm numarası listeledim, global sürüm değişkenine referans vermek için version: version kullandım.Bu şekilde, sistemimdeki her bir eser aynı sürümde bulunuyor. Ben 1.0 1.0-SNAPSHOT bu değiştirip sırayla her birini inşa edebilirsiniz.

cevap

45

Sen ('Yükle' görev anlık ve bırakma depo yapılandırabilirsiniz örneğin uploadArchives) görev: *-SNAPSHOT sürümleri snapshotRepository için

uploadArchives { 
    repositories { 
     mavenDeployer { 
      repository(url: 'http://myCompanyRepo.com:8081/releases') { 
       authentication(userName: 'admin', password: 'password'); 
      } 
      snapshotRepository(url: 'http://myCompanyRepo.com:8081/snapshots') { 
       authentication(userName: 'admin', password: 'password'); 
      } 
     } 
    } 
} 

kullanılır. Aksi halde yayınları repo kullanılır.

+0

üzgünüm, sarmaşık tarzı kullanıyorum açıklık gerekirdi depoları. Soruyu güncelleyeceğim. – dev

+0

Nexus, sarmaşık stil depolarını desteklemiyor. Maven, Gradle, Gant, sbt, Leiningen, Ivy ve diğerleri de dahil olmak üzere tüm yapı araçları tarafından anlaşıldığı için Maven bir depo formatı kullanmak daha iyi olur. –

+0

Ivy ayarları ile Nexus'a yayınlayabiliyorum gibi görünüyor mu? Latest.integration kullanabilmek için sarmalayıcı olarak yayınlamam gerekiyor. Nexus'ta bir maven repo formatına geçersem, bu özelliği kullanamayacağım. – dev

36

yeni maven-publish eklenti kullanmak istiyorsanız, bir if ifadesini kullanarak farklı depoları yükleyebilirsiniz:

apply plugin: 'maven-publish' 

... 

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java 
     } 
    } 
    repositories { 
     maven { 
      credentials { 
       username "anonymous" 
      } 

      if(project.version.endsWith('-SNAPSHOT')) { 
       url "http://example/artifactory/libs-snapshot-local" 
      } else { 
       url "http://example/artifactory/libs-release-local" 
      } 
     } 
    } 
} 

Referans: maven-publish and setting snapshotRepository and releaseRepository

+1

yoktur. Bu çözümün sadece maven eklentisini kullanmanın avantajı nedir? – Janosch

İlgili konular