SORU
21 Temmuz 2010, ÇARŞAMBA


Nasıl belirtmek için maven'In distributionManagement Örgütü geniş?

Nexus merkezi bir depo içine dağıtmak, böylece çok sayıda (50 civarında ) maven2 projeleri tamamlamak için nasıl anlamaya çalışıyorum. mvn deploy amaç kullanırken, bu gibi distributionManagement etiketinde hedef belirlemek gerek yok:

<distributionManagement>
   <repository>
      <id>nexus-site</id>
        <url>http://central_nexus/server</url>
   </repository>
</distributionManagement>

Şimdi, bu bloğu tekrar tekrar içeren her pom.xml (50 ) istemiyorum. Benim ilk olsa settings.xml dosya olurdu, ama bu mümkün değil (tasarım) orada tanımlamak gibi görünüyor. İlk soru şu oluyor: neden bu durumda ? Eğer mümkün olsaydı tüm geliştiriciler için dağıtılmış olabilir maven2 dağıtımı settings.xml bunu belirtmek istiyorum.

Tek Olası çözüm buldum oldu oluşturmak için bir organizasyon çapında usta-pom proje, bu içermiyor bu ayarlar, ve tüm diğer pom.xml bağlı bu ana-pom) <parent> etiket. Ama bu tür Çoklu modül oluşturur: garip görünüyor

- master configuration POM (pm)
- Project 1 parent pom (p1 with module 1 and module 2 as modules)
    - Project 1 module pom (with pm as parent)
    - Project 2 module pom (with pm as parent)

Genellikle modül gösteri kızları üst pom, bazı farklı değil kullanması gereken tüm belgeleri okudum. Ama Miras v. Toplama hakkında maven Web sitesini okuduktan sonra gerçekten mümkün olduğunu yazıyor.

Bulduğum tek sorun bu kurulum ile ilgili sorunlar var gibi görünüyor hangi maven site nesil (modüller geri-referans doğrudan varsa hiç düzgün bağlı değil)

Bu geçerli bir yaklaşım ? Bu sorun için, daha açık, daha basit başka bir çözümü ?

CEVAP
21 Temmuz 2010, ÇARŞAMBA


Bunun için en iyi çözüm basit üst pom dosyası projesi (paketleme) ve kuruluşunuzun tüm projeler için jenerik pom. ile oluşturmaktır

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>your.company</groupId>
    <artifactId>company-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <distributionManagement>
        <repository>
            <id>nexus-site</id>
            <url>http://central_nexus/server</url>
        </repository>
    </distributionManagement>

</project>

Bu inşa, serbest olabilir, ve herkes bu eseri erişebilir, yerel nexus görevlendirilecek.

Şimdi kullanmak istediğiniz tüm projeler için, sadece bu bölüm vardır:

<parent>
  <groupId>your.company</groupId>
  <artifactId>company-parent</artifactId>
  <version>1.0.0</version>
</parent>

Bu çözüm kolayca şirketinizin tüm projeler için diğer ortak şeyler eklemek için izin verir. Eğer belirli bir sürümü için JUnit kullanımını standardize etmek istedim örneğin, bu bunun için mükemmel bir yer olurdu.

Eğer projeleri kullanım multi-modül yapıları kendi ana, Maven da destekler zincirleme miras yani bu tamamen kabul edilebilir hale projenizin üst pom dosya başvurmak için şirketinizin üst pom ve projenin alt modülleri bile farkında şirketinizin üst.

Toplayıcı sizin pom olarak aynı seviyede ana proje koymaya çalıştığınız örnek proje yapı görüyorum. Eğer projenizin ihtiyaçlarını kendi ebeveyn, en iyi yaklaşım var bulundu içerecek şekilde ebeveyn de aynı seviyeye geri kalan modüller ve toplayıcı pom.xml dosya kök tüm modülleri' dizinler var.

- pom.xml (aggregator)
    - project-parent
    - project-module1
    - project-module2

Ne bu yapısı ile toplayıcı üst modülü bulunur ve "yükle" kök dizininden. mvn ile her şeyi yapmak.

Benim şirketim de bu kesin çözüm kullanırız ve zaman test durdu var ve oldukça iyi çalıştı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • KSI

    KSI

    25 Temmuz 2009
  • Ralph Phillips

    Ralph Philli

    5 Aralık 2006
  • Samvith V Rao

    Samvith V Ra

    20 EKİM 2006