Bağımlılık sürümü çakışmalarından kaçının?


10

Kavanozumu kullanan herhangi bir Java projesi, kavanozumun da bağımlılık olarak içerdiği başka bir kavanoza neredeyse kesinlikle ek bir bağımlılığa sahip olacak.

Sorun şu ki, diğer kavanozun birden fazla versiyonu var.

Büyük olasılıkla projenizin 2. kavanoz versiyonunun kavanozun 2. kavanoz versiyonundan farklı olması durumunda ortaya çıkabilecek sorunları nasıl önleyebilirim?

Kullanıcılarımın kavanozumu eklemek için bazı süslü sınıf yükleme hilesi yapmak zorunda kalmasını istemiyorum.

Bu ortak bağımlılığın olası her versiyonu için kavanozumun farklı versiyonlarını yapmalı mıyım? Ve sonra sadece kavanozumun versiyonunu seçtiniz, zaten 2. kavanozun hangi versiyonunu kullanırsınız?

Bunu halletmenin ve insanların kavanozumu çatışma olmadan kullanmasını kolaylaştırmanın daha akıllı bir yolu var mı?

Yanıtlar:


10

Senin sorunun değil . Çözmek son kullanıcınıza bağlıdır. Sadece üçüncü taraf bağımlılıkların kullanıldığı bölge ile birlikte geliyor ve bağımlılık çatışmalarını saydığımdan daha fazla çözmek zorunda kaldım. Her projenin kendine özgü bağımlılık çatışmalarına uyum sağlayamazsınız.

Yazılımınız bağımlılıklarınızın en son sürümleriyle doğru şekilde çalışmalıdır. Bağımlılık, her sürümdeki arayüzlerini değiştirmedikçe, bir dizi uyumluluğunuz olmalıdır (örneğin, yazılımınız aralıktaki tüm dep sürümleri için çalışır [2.0.0, 3.0.0)). Yazılımı koruduğunuz sürece, tüm bağımlılıklarınızın en son sürümüyle uyumlu kalmaya çalışmalısınız.

Bununla birlikte, yazılımınızı bağımlılığınızın farklı sürümüyle kullanan bir geliştirici olarak yararlı bulacağım bazı şeyler var.

  • Projeniz ve başka bir proje arasındaki entegrasyon sıkı ise, belgelerinizde bir uyumluluk çizelgesine sahip olmak yararlı olacaktır. Ne olursa olsun, belgelerinizdeki bağımlılığın belirli sürümleriyle ilgili bilinen sorunları belirtmelisiniz. Aksi takdirde geliştiriciler, deneme yanılma yoluyla uyumlu bir sürüm bulmalıdır.
  • Bir arayüz aracılığıyla bağımlılıkla işbirliğini soyutlayın ve yazılımınızı, uygulamanın bağımlılık enjeksiyonuyla değiştirilebileceği şekilde tasarlayın. Bu, son kullanıcı olarak sizi rahatsız etmeden kendi entegrasyonumu kütüphanenin x sürümü ile değiştirmeme izin veriyor.
  • Kullanıcılarınızın ortak bağımlılığın belirli sürümlerini desteklemenizi isteyebilmesi için genel bir sorun izleyiciniz olsun. Birçok kullanıcının bağımlılığın uyumsuz bir sürümü için destek istediklerini görürseniz, her ikisinin de sürümlerini yayınlayabilirsiniz. Birden çok platformu hedefledikleri bu Maven örneğine bakın - bağımlılığın farklı sürümleri için destek benzer olmalıdır.

Java'da "bağımlılık isteyen kütüphaneler Foo v3.0.2'nin aslında Foo v3.0.5 kullanması ve v3.0.2 gibi davranması gerektiğini" belirtebileceğiniz montaj bağlamaRedirect App.config ayarı gibi bir şey var mı? 11 yılı aşkın bir süredir Java yapmadım, bu yüzden bunun nasıl işlediğine dair anılarım GONE.
John Zabroski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.