SORU
26 Temmuz 2012, PERŞEMBE


İle " uğraşan;cehennem" Xerces; Java/Maven?

Ofisimde, kelime Xerces sadece söz geliştiricilerin öldürücü öfkesini üzerlerine çekmek için yeterlidir. Diğer üstünkörü bir bakışta ÖYLE görünüyor neredeyse tüm Maven, kullanıcıların bir noktaya kadar. bu sorundan dokundu belirten sorular Xerces Ne yazık ki, sorunun anlaşılması Xerces tarihi hakkında bilgi biraz gerektirir

Tarih

  • Xerces Java ekosisteminde en çok kullanılan XML ayrıştırıcı. Hemen hemen her kütüphane veya çerçeve Java ile yazılmış bazı kapasite (geçişli, doğrudan değilse) Xerces kullanır.

  • Xerces kavanoz official binaries dahil, bu gün için değil, sürüm bilgisi vardır. Örneğin, uygulama jar 2.11.0, Xerces xercesImpl.jar adlı xercesImpl-2.11.0.jar değil.

  • Xerces takım değiller demek ki does not use Maven, 30 ** resmi bir sürüm yükleyin.

  • Xerces eskiden released as a single jar (xerces.jar), bölünmüş iki kavanoz, bir içeren API (xml-apis.jar) ve bir içeren uygulamaların bu API (xercesImpl.jar). Birçok eski Maven Gösteri hala xerces.jar bir bağımlılık bildirin. Geçmişte bazı noktada, Xerces da bazı eski Gösteri kızları da bağlı olan xmlParserAPIs.jar olarak serbest bırakıldı.

  • Sürümleri Maven alanlarına şişelerini dağıtmak isteyenler tarafından xml-API ve xercesİmpl kavanoz atanan sık sık farklı. Örneğin, xml-API 1.3.03 ve xercesİmpl sürümü Xerces 2.8.0 gelen olsa bile 2.8.0, verilebilir sürüm verilebilir. Bu insanlar bunu uygulayan çoğu özellikleri sürümü ile xml-API kavanoz etiketi olmasıdır. here Bu çok güzel, ama eksik bir arıza var.

  • Karmaşık konularda, Xerces XML parser XML İşleme için Java API (JAXP), referans uygulamasında kullanılan TOTEM dahildir. Uygulama sınıfları bazı JREs mevcut olmayabilir gibi tehlikeli onlara erişmek için yapar com.sun.* ad altında doğrudan yeniden. Ancak, Xerces tüm işlevleri java.* javax.* API üzerinden maruz kalmaktadır; örneğin, Xerces serileştirme ortaya çıkaran API yok.

  • Kafa karıştırıcı karışıklık ekleyerek, neredeyse tüm sunucu uygulaması kaplar (JBoss, İskele, Önemli olan, Tomcat, vb.), /lib klasörleri bir veya daha fazla Xerces ile birlikte.

Sorunları

Çatışmaların Çözümü

Bazı ... ... ya da yukarıdaki sebepler, çoğu belki de hepsi -- örgütler ve onların içinde Xerces özel inşa yayınlamak tüketmek Gösteri kızları. Bu gerçekten bir sorun varsa, küçük bir uygulama ve sadece kullanarak Maven Central, ama çok kısa bir süre içinde bir sorun için kurumsal yazılım nerede Artifactory veya Rabıta proxy birden çok depoları (JBoss, Hazırda bekleme vb.): xml-apis proxied by Artifactory

Örneğin, bir organizasyon xml-API olarak yayımlayabilir

<groupId>org.apache.xerces</groupId><artifactId>xml-apis</artifactId><version>2.9.1</version>

Bu arada, organizasyon B aynı kavanoz: yayımlayabilir

<groupId>xml-apis</groupId><artifactId>xml-apis</artifactId><version>1.3.04</version>

B jar bilmez Maven Bir kavanoz, daha düşük bir sürüm olmasına rağmen farklı oldukları için aynı obje olduğunu groupIdler. , Çatışma çözümü ve her ikisi de gerçekleştirmek böylece kavanoz çözülmüş bağımlılıklar dahil olacak:

resolved dependencies with multiple xml-apis

Classloader Cehennem

Yukarıda da belirtildiği gibi, TOTEM JAXP RI içinde Xerces ile birlikte gelir. Ederken güzel olurdu işaretlemek için tüm Xerces Maven bağımlılıklar <exclusion>s veya <provided>, üçüncü taraf kod size bağlı olabilir veya olmayabilir işe sürümü ile sağlanan JAXP ve FIRSATLAR kullanıyorsun. Buna ek olarak, uğraşmak Xerces kavanoz sunucu uygulaması konteynırında sevk var. Bu seçenek ile başbaşa bırakır: sunucu sürümü silin ve konteyner JAXP sürümü üzerinde çalışan umut? Sunucu sürümü bırakmak mı iyidir, ve uygulama çerçeveleri sunucu sürümü üzerinde çalışan umut? Eğer bir veya iki çözümlenmemiş çatışmalar, ana hatlarıyla yukarıda yönetmek için kayma halinde Ürün (easy başına büyük bir organizasyon), Hızlı bul kendine classloader cehennem, acaba hangi sürümü Xerces bu classloader. toplama zamanı ve olup olmadığını ya da değil, o-ecek almak aynı kavanoza Windows ve Linux (muhtemelen değil).

Çözümler?

Denedik münasebetiyle tüm Xerces Maven bağımlılıklar <provided> veya <exclusion>, ama bu zor sergilemesi (özellikle büyük takım) verilen bu eserleri öyle çok takma ad (xml-API, xerces, xercesİmpl, xmlParserAPİs, vb.). Ayrıca, bizim üçüncü/çerçeveler JAXP sürümü veya sürüm sunucu uygulaması bir konteyner tarafından sağlanan üzerinde çalışabilir. libs.

Nasıl en iyi Maven ile bu sorunu ele alabilir miyiz? Bizim bağımlılıklar üzerinde hassas bir tür denetime sahip, ve katmanlı classloading güveniyor o zaman? Bir şekilde genel olarak tüm Xerces bağımlılıkları hariç, ve çerçeveler tüm kuvvet/JAXP sürümünü kullanmaya libs var mı?


GÜNCELLEME: Joshua Spiewak, Xerces yamalı bir sürüm yüklemek Merkezi Maven sağlayan XERCESJ-1454 için komut dosyaları oluşturmak yükledi. Oy/izle/bu konuya katkıda bulunmak ve bu sorunu kökünden çözelim.

CEVAP
7 Mart 2013, PERŞEMBE


2.11.0 Kavanoz vardır(kaynak Kavanoz!)Maven Central xerces beri Şubat 2013 20! Xerces in Maven Central bkz. https://issues.apache.org/jira/browse/XERCESJ-1454... çözemediler merak ediyorum

Kullandım:

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.11.0</version>
</dependency>

ve tüm bağımlılıklar iyi - hatta uygun xml-apis-1.4.01 çözdünüz!

Ve en önemli (ve ne geçmişte belli değildi) - Maven bulunan KAVANOZ Merkezi** 25 resmi dağıtım aynı KAVANOZ.

Ancak xml-schema-1.1-beta sürüm - ek bağımlılıkları nedeniyle *-ed*27 Maven bir sürüm olabilir mi bulamadım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BiGSH0TROB

    BiGSH0TROB

    7 NİSAN 2011
  • Mr_BrettHooge

    Mr_BrettHoog

    3 Ocak 2011
  • njhaley

    njhaley

    24 NİSAN 2006