Farklı derleme profilleri için farklı bağımlılıklar


115

Farklı profiller için bir maven pom.xml dosyasında farklı bir bağımlılık kümesine sahip olmak mümkün müdür?

Örneğin

mvn -P debug
mvn -P release

Aynı sınıf adlarına ve aynı arabirimlerin farklı uygulamalarına sahip bir profilde farklı bir bağımlılık jar dosyası almak istiyorum.


Bu, farklı web sunucularını hedeflerken kullanılabilir. Örneğin, savaş dosyanıza eklememeniz gereken JAXB gibi kitaplıkları sunan bir JavaEE 5 sunucusu için derleme yaparken, JAXB kavanozunu eklemeniz gereken bir JavaEE 1.4 sunucusu için derleme yaparken.
Leonel

Yanıtlar:


174

Bununla ilgili Maven belgelerine alıntı yapmak için :

Bir profil öğesi hem isteğe bağlı bir etkinleştirmeyi (bir profil tetikleyicisi) hem de bu profil etkinleştirildiyse POM'da yapılacak değişiklikler kümesini içerir. Örneğin, bir test ortamı için oluşturulmuş bir proje, son dağıtımdan farklı bir veritabanına işaret edebilir. Veya kullanılan JDK sürümüne bağlı olarak farklı depolardan bağımlılıklar çekilebilir .

(Vurgu benimdir)

releaseProfil için bağımlılığı profil bildiriminin içine koyun ve aynısını için yapın debug.

<Profilleri>
    <Profil>
        <İd> ayıklama </ id>
        ...
        <Bağımlılıklar>
            <Bağımlılık> ... </ bağımlılığı>
        </ Bağımlılıklar>
        ...
    </ Profile>
    <Profil>
        <İd> salma </ id>
        ...
        <Bağımlılıklar>
            <Bağımlılık> ... </ bağımlılığı>
        </ Bağımlılıklar>
        ...
    </ Profile>
</ Profilleri>

2
Bu yöntem, düzenleme modunda kodun çözülmemesine neden olur. Hata ayıklama etkinse, serbest bırakma bağımlılık kavanozu eksik olacak ve kod hata verecektir. Nasıl çözülür?
brucenan

6
Sürüme özgü bağımlılığın kapsamını bağımlılık hiyerarşisinde "sağlanan" olarak ayarlayabilir ve yayın profili bölümünde kapsamı "derleme" olarak sıfırlayabilirsiniz. Böylelikle, bağımlılık derleme için kullanılabilir, ancak 'hata ayıklama' profili için son savaşta değil.
uday

@uday Bu yaklaşımı gösteren bir cevap verirseniz, ona
oy

IMHO profilleri, en azından bağımlılıklar için işe yaramaz: IDE'ler hata verir, bağımlılıklar çözülmeyi durdurur, uygulamalar sonunda çalışmaz. Daha fazlasını bekliyordum.
Ares

6

GroupId, artifactId, profillerinizde özellikler olarak belirtilmelidir ve bağımlılıklarınızı genel bölüme taşıyabilirsiniz.


2
Bu, yalnızca 1 bağımlılığınız varsa geçerli olacaktır. Bağımlılıkların sayısı hata ayıklama ve serbest bırakma arasında farklılık gösteriyorsa, yalnızca belirteçleme çalışmaz. Bu nedenle, profil bölümündeki depoların belirtilmemesini ve açıkça tanımlanmamasını tavsiye ederim.
Marcel Overdijk

Diğer belirli profil bağımlılıkları ile birlikte varsayılan profil bağımlılıkları hala dahil edildiğinden, diğer yanıt benim için işe yaramadı. Cevabınız gayet iyi çalıştı.
Vlad Mihalcea

@Vlad POM'un ana gövdesinden bağımlılığı kaldırdınız mı? Aksi takdirde iki kez sahip olacaksınız. ( Bir profilin her zaman etkin olduğundan nasıl emin olacağınız hakkında bilgi için stackoverflow.com/q/24855678/6944068 sayfasına bakın .)
toolforger
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.