SORU
12 Aralık 2008, Cuma


Kavanoz 2 yüklemeden sınıf maven inşa ekleyebilir miyim?

Maven2 bana gelişim deneme / hızlı ve kirli prototip aşamasında deli ediyor.

Kullanmak istiyorum web uygulaması çerçevesinde bağımlılıklarını tanımlayan pom.xml elimde bir dosya var, ve hızlı bir şekilde bu dosya marş projeler üretebilirsiniz. Ancak bazen istediğim bağlamak için bir 3. parti kitaplığı yok zaten bir pom.xml dosya tanımlı, bu yüzden yerine oluşturmak pom.xml dosyası için 3. parti lib tarafından el ve yüklemek ve eklemek için bağımlılık benim pom.xml, tıpkı benim gibi söyle Maven: "ayrıca benim tanımlanan bağımlılıkları vardır herhangi bir kavanoz vardır /lib de."

Bu basit olmalıdır gibi görünüyor, ama eğer değilse, ben bir şey eksik.

Bunun nasıl yapılacağı hakkında herhangi bir işaretçiler büyük takdir. Dahası, eğer var basit bir yolu işaret maven için bir /lib dizin ve kolayca oluşturun pom.xml ile tüm kapalı kavanoz eşlenen tek bir bağımlılık ki ben de sonradan adı / yüklemek ve bağlamak için bir baskın düştü de yeterli.

CEVAP
2 EKİM 2011, Pazar


Popüler yaklaşımların sorunları

En cevapları bulacaksın ınternet öngörülüyor sana da yüklemek bağımlılığı için yerel depo veya belirtmek bir "sistem" kapsamında pom ve dağıtmak bağımlılığı ile kaynak projesi. Ama bu çözümlerin her ikisi de aslında yanlıştır.

Uygulamak gerekmez mi neden "Yerel" Repo " yaklaşımı Yükleyin

Yerel depo için bir bağımlılık yüklediğinizde orada kalır. Dağıtım eser güzel bu depo erişimi olan sürece işe yarar. Sorun bu depo başka bir makinede bu sorununuzun çözümü yolu yok hayır yani yerel makine üzerinde bulunan, çoğu durumda. Açıkça objeyi belirli bir makineye bağlı işleri işlemek için bir yol değildir. Aksi halde bu bağımlılık yerel olarak iyi değildir ki her makine bu proje ile çalışma üzerine kurulu olmak zorunda.

Geçerli neden olmamalıdır "Kapsam" yaklaşımı . Sistem

Birlikte yaşaman kavanoz "Sistemi Kapsamında" yaklaşımı, ne de herhangi bir depo yüklü olsun ya da hedef paketlere bağlı. Bu dağıtım paketi kullanıldığında bağımlılık çözmek için bir yol olmayacak. İnanıyorum ki bu sistem kapsamında kullanımı bile itiraz almasının sebebi oldu. Zaten kaldırılmış bir özellik güvenmek istemiyorsun.

Statik proje depo çözüm

pom: Bu koyarak sonra

<repository>
    <id>repo</id>
    <releases>
        <enabled>true</enabled>
        <checksumPolicy>ignore</checksumPolicy>
    </releases>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <url>file://${project.basedir}/repo</url>
</repository>

form grup kimliği ile her obje için x.y.z Maven eserler için: arama çalışmalarında proje dir içinde aşağıdaki konumda yer alacak

repo/
| - x/
|   | - y/
|   |   | - z/
|   |   |   | - ${artifactId}/
|   |   |   |   | - ${version}/
|   |   |   |   |   | - ${artifactId}-${version}.jar

Bu konuda daha fazla ayrıntı için this blog post okuyabilirsiniz.

Maven projesi repo yüklemek için kullanın

Elle bu yapıyı oluşturmak yerine eser olarak kavanoz yüklemek için bir Maven eklentisi kullanmanızı tavsiye ederim. Böylece, proje depo repo altında bir klasör yürütmek için bir obje yüklemek için:

mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]

Eğer bu yaklaşım tercih ederseniz pom depo bildirimi kolaylaştırmak için mümkün olacak:

<repository>
    <id>repo</id>
    <url>file://${project.basedir}/repo</url>
</repository>

Yardımcı bir script

Beri yürütülen yükleme komut için her lib biraz sinir bozucu ve kesinlikle hata eğilimli, ben oluşturulan bir utility script otomatik olarak yükler tüm kavanoz lib klasör için bir proje depo, otomatik olarak çözme tüm meta (groupİd, artifactİd vb.) dosyaların adları. Senaryoyu da bağımlılıkları pom senin için Kopyala-Yapıştır xml yazdırır.

Hedef paket bağımlılıkları vardır

Ne zaman olacak bu proje depo oluşturulan zorundasın çözülmüş bir sorun dağıtma bağımlılıklar proje ile kaynak, ama o zamandan bu yana, projenizin hedef obje olacak bağlı olmayan yayınlanan çömlekler, ne zaman olacak yüklemek için bir depo olacak unresolvable bağımlılıkları.

Bu sorunu yenmek için hedef paketinde bu bağımlılıkları vardır öneririm. Bu OneJar Plugin ya Assembly Plugin veya daha iyi yapabilirsiniz. OneJar resmi belgelerini kolay kavramak için.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boburnham

    boburnham

    11 Temmuz 2006
  • RD

    RD

    19 NİSAN 2006
  • Tome Rodrigo

    Tome Rodrigo

    9 Temmuz 2006