Dependensi berbeda untuk profil build yang berbeda

115

Apakah mungkin memiliki sekumpulan dependensi yang berbeda dalam file maven pom.xml untuk profil yang berbeda?

misalnya

mvn -P debug
mvn -P release

Saya ingin mengambil file jar dependensi yang berbeda dalam satu profil yang memiliki nama kelas yang sama dan implementasi berbeda dari antarmuka yang sama.

Izb
sumber
Ini dapat digunakan saat menargetkan server web yang berbeda. Misalnya, saat membuat untuk server JavaEE 5, yang menawarkan libs seperti JAXB, yang tidak boleh Anda sertakan dalam file perang, versus membuat untuk server JavaEE 1.4, di mana Anda harus menyertakan tabung JAXB.
Leonel

Jawaban:

174

Mengutip dokumentasi Maven tentang ini :

Elemen profil berisi aktivasi opsional (pemicu profil) dan serangkaian perubahan yang akan dilakukan pada POM jika profil tersebut telah diaktifkan. Misalnya, proyek yang dibangun untuk lingkungan pengujian mungkin mengarah ke database yang berbeda dari yang ada pada penerapan akhir. Atau dependensi dapat ditarik dari repositori yang berbeda berdasarkan versi JDK yang digunakan .

(Penekanan adalah milikku)

Letakkan saja dependensi untuk releaseprofil di dalam deklarasi profil itu sendiri dan lakukan hal yang sama untuk debug.

<profiles>
    <profile>
        <id> debug </id>
        …
        <dependensi>
            <dependensi>… </dependensi>
        </dependensi>
        …
    </profile>
    <profile>
        <id> rilis </id>
        …
        <dependensi>
            <dependensi>… </dependensi>
        </dependensi>
        …
    </profile>
</profiles>
Aleksandar Dimitrov
sumber
2
Metode ini akan menyebabkan kode tidak terselesaikan dalam mode edit. Jika debug aktif, tabung ketergantungan rilis akan hilang, dan kodenya akan menjadi error. Bagaimana cara mengatasinya?
brucenan
6
Anda dapat menyetel cakupan dependensi khusus rilis sebagai 'disediakan' dalam hierarki dependensi dan menyetel ulang cakupan ke 'kompilasi' di bagian profil rilis. Sehingga ketergantungan tersedia untuk kompilasi tetapi tidak dalam perang terakhir untuk profil 'debug'.
uday
@uday Jika Anda akan memberikan jawaban yang menunjukkan pendekatan itu, saya ingin sekali memberi
suara positif
Profil IMHO tidak berguna, setidaknya untuk dependensi: IDE memberikan kesalahan, dependensi berhenti menyelesaikan, aplikasi tidak berfungsi pada akhirnya. Saya mengharapkan lebih.
Ares
6

GroupId Anda, artifactId harus diberi token di profil Anda sebagai properti dan Anda dapat memindahkan dependensi Anda ke bagian generik.


sumber
2
Ini hanya akan terjadi jika Anda memiliki 1 ketergantungan. Jika jumlah dependensi berbeda antara debug dan rilis, hanya tokenizing tidak akan berfungsi. Dalam hal ini saya akan merekomendasikan untuk tidak melakukan tokenisasi dan secara eksplisit mendefinisikan deps di bagian profil.
Marcel Overdijk
Jawaban lain tidak berhasil untuk saya, karena dependensi profil default masih disertakan bersama dengan dependensi profil spesifik lainnya. Jawaban Anda bekerja dengan baik.
Vlad Mihalcea
@Vlad Apakah Anda menghapus ketergantungan dari badan utama Badan POM? Jika tidak, Anda akan memilikinya dua kali. (Lihat stackoverflow.com/q/24855678/6944068 tentang cara memastikan satu profil selalu aktif.)
toolforger