Projenizdeki SNAPSHOT bağımlılıklarına güvenirken, hermetik yapıların elde edilebileceği bir yol yaratmaya çalışıyorum. Örnek olması amacıyla Hermetik Maven Oluşturma
, böyle bir bağımlılık yapıya sahip bir proje olduğunu varsayalım: lokal olarak ilişkilidir şey yapmak istiyorum ne ┌ other-1.2-SNAPSHOT
mine-1.2.3 ──┤
└ thing-3.1-SNAPSHOT ── gizmo-6.1.3-SNAPSHOT
tüm ANLıK bağımlılıkları çözmek olduğunu benim Geçerli sürümü ve daha sonra bunları Nexus'un yayın deposuna yayınlar olarak dağıtın. Bu bağımlılıkların hepsi içsel değildir, bu yüzden her biri üzerinde bir tahliye edemem. Bu örnekte other-1.2-mine-1.2.3
ve thing-3.1-SNAPSHOT
thing-3.1-mine-1.2.3
olacaktır. Bu yaklaşık 60 sıra pitonda nispeten önemsizdir. Ancak sorun, geçişli SNAPSHOT'ları somut versiyonlara çözmektir. Bu yüzden gizmo-6.1.3-SNAPSHOT
'u gizmo-6.1.3-mine.1.2.3
'a dönüştürmem gerekiyor ve thing-3.1-mine-1.2.3
buna bağlı.
Bu, yalnızca istediğimi gerçekleştirmenin tek yolunun bir örneğidir. Amaç, bir ya da iki yıl boyunca, sürüm 1.2.3 için sürüm şubemde ödeme yapabilir ve uzun zamandır devam eden SNAPSHOT bağımlılıklarını çözme konusunda endişelenmenize gerek kalmadan mvn clean package
ya da benzerlerini çalıştırabilmem.
Bu şubenin, derleme bağlayıcısının jar-and-dependencies
işlevselliği gibi bir şey kullanarak tüm bağımlılıkları korumakla kalmayıp, aynı zamanda önemli olması önemlidir. Potansiyel olarak kaynak dosyaları değiştirebilir ve başka bir sürüm oluşturmayı (örneğin, bir düzeltme uygulayarak) yapmak isterim.
Yani,
- somut olarak bir özyinelemeli şekilde ANLıK bağımlılıkları dönüştürmek mümkün olacak bu mevcut gibi bir şey var mı?
- Bu tür şeyleri sizin için yöneten eklentiler var mı? Sürüm eklentisi,
branch
hedefinde bazı yapılandırma seçenekleri vaat ediyordu, ancak istediğim dereceye kadar harici depsleri çözemiyor. - Hermetik Maven oluşturmak için başka teknikler mevcut mu?
Bana bir anti Maven hack gibi geliyor. Maven'de temel temel kurallardan biri ** Sözleşme Aşamasında Yapılandırma **. Bağımlılıklar kendiniz oluşturuyorsa, SNAPSHOT/RELEASE sürümünü kendiniz düzgün bir şekilde yönetmeniz/kullanmanız gerekir. Başka bir yerden geliyorlarsa, her zaman en son sürüm sürümünü kullanmalısınız (SNAPSHOT sürümü değil). [Maven The Complete Reference - bölüm 3.3.1] 'a ikinci bir göz atın (http://www.sonatype.com/books/mvnref-book/reference/pom-relationships-sect-pom-syntax.html#pom-reationships -sect-sürümleri) ve SNAPSHOT'un Maven'de neden kullanıldığını görün. – yorkw
Maven'in temellerini çok iyi anlıyorum. Ancak, gerçek dünyada, son derece kullanışlı ve SNAPSHOT versiyonlarına uzun süre dayanan son teslim tarihleri ve üçüncü parti kütüphaneleri ile yaşıyorum. Jason Van Zyl, bildiğiniz birileri bile, yayınlar etrafında süreç-ağır bir sisteme sahip olma fikrini kabul ediyor bile, büyük bir hataydı (ve tesla ile değişiyor). Tüketmekte olduğumuz tüm projelerin iç çatallarını korumanın en kısa yolu, yaptığım şey aslında daha fazla sıçramalar ve sınırlar. –
Dünyada bile iyi bir sebep dikkate alınmalıdır. Buradaki sistemle savaşıyorsun. Anlattığınız gibi Anlık Görüntüler yeterince uzun süre yaşamaz - zaman damgalı anlık görüntüler kullanarak artifact çözünürlüğüne güveniyorsanız bile. Benim yaklaşımım, bağımlılıkları kullanmak ve eklentileri kullanarak tüm eserleri almak ve bilinen enstantane bağımlılıklarını bir betik veya kendi kendine yapılan maven eklentisi kullanarak kendi maven repo'larına yerleştirmek olurdu. Belki diğer gizemlerle konuşmak da yardımcı olur: eğer eserlerinin beta versiyonlarını serbest bırakabilirlerse, etrafta çok fazla dalgalanma olmayanlara güvenebilirsiniz. – wemu