Saya memiliki profil di pom.xml saya yang harus selalu aktif kecuali jika dinonaktifkan secara eksplisit (-P! FirstProfile). Saya menyelesaikan ini dengan menggunakan bendera activeByDefault:
<profiles>
<profile>
<id>firstProfile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
...
</profile>
</profiles>
Sekarang di pom.xml yang sama saya memiliki profil kedua yang ditentukan ini hanya boleh aktif jika profil benar-benar diaktifkan (-P secondProfile). Jadi perilaku defaultnya adalah: firstProfile active, secondProfile inactive. Di titik lain, saya ingin mengaktifkan profil kedua selain profil pertama. Sekarang masalahnya adalah jika saya melakukan itu dengan "-P secondProfile" sayangnya firstProfile akan dinonaktifkan. Dokumentasi Maven menyatakan ini:
... Profil ini secara otomatis akan aktif untuk semua build kecuali profil lain di POM yang sama diaktifkan menggunakan salah satu metode yang dijelaskan sebelumnya. Semua profil yang aktif secara default dinonaktifkan secara otomatis saat profil di POM diaktifkan pada baris perintah atau melalui konfigurasi aktivasi. ...
Apakah ada kemungkinan bagaimana membuat firstProfile selalu aktif (tanpa harus mendeklarasikannya di settings.xml)?
Jawaban:
Salah satu triknya adalah menghindari
activeByDefault
, dan sebaliknya mengaktifkan profil dengan tidak adanya properti, misalnya:Anda kemudian harus dapat menonaktifkan profil dengan
-DskipFirstProfile
atau dengan-P !firstProfile
, tetapi jika tidak, profil akan aktif.Lihat: Maven: Referensi Lengkap, Aktivasi Profil - Aktivasi dengan Tidak Ada Properti
sumber
firstProfile
dinonaktifkan hanya jika Anda menentukan-DskipFirstProfile
(mismvn verify -DskipFirstProfile
.).Saya berharap ada kemungkinan seperti itu, saya sering melewatkannya. Satu-satunya masalah JIRA relevan yang dapat saya temukan adalah yang ini:
Dan itu telah diselesaikan sebagai
Not A Problem
.Saya telah berhenti menggunakan
activeByDefault
, karena pendekatan "semua atau tidak sama sekali" ini membuat saya tidak berharga.Satu-satunya cara untuk mengubah perilaku ini adalah dengan menulis pengganti Anda sendiri
DefaultProfileSelector
, mendaftarkannya sebagai komponen plexus@Component( role = ProfileSelector.class )
dan memasukkannya${MAVEN_HOME}/lib/ext
(dengan cara itu akan dipilih sebagai pemilih profil default). (Jika Anda menggunakan Maven 3.0.2 atau lebih lama, Anda juga harus mengedit${MAVEN_HOME}/bin/m2.conf
untuk memuatlib/ext
sebelum dimuatlib
)sumber
Pertanyaan ini kuno, tetapi tampaknya masalahnya dapat dipecahkan dengan menggunakan
activeProfile
daripadaactiveByDefault
. Saya menggunakan Maven 3.3.9, tetapi solusinya dapat berfungsi pada versi sebelumnya.Cukup cantumkan apa yang Anda
activeProfiles
milikisettings.xml
, seperti:Di
my-awesome-profile
Saya memiliki pengaturan seperti URL database dan sebagainya, jadi mereka selalu berlaku. Di sini, saya mengaktifkan profil kedua,resolve-from-central
:Perhatikan bagaimana
my-awesome-profile
masih aktif. Yay!sumber
Anda cukup mencantumkan semua profil yang ingin Anda aktifkan pada baris perintah seperti:
-P profil-1, profil-2
maven dirancang untuk memungkinkan aktivasi beberapa profil secara otomatis, namun jika Anda menimpanya dengan -P maka hanya profil yang tercantum dalam parameter yang diaktifkan.
sumber
-P
hanya menonaktifkan<activeByDefault>
profil. Profil yang diaktifkan oleh<activeProfiles>
dalamsettings.xml
atau oleh jenis lain apa pun<activation>
tetap aktif kecuali dinonaktifkan secara eksplisit.Profil adalah cara yang baik untuk menertibkan ke POM. Terutama jika Anda menggunakan beberapa eksekusi dari plugin yang sama untuk tujuan berbeda.
Menggunakan file:
Ini akan selalu benar (kecuali seseorang menghapus direktori selama boot Maven :). Diuji dengan Maven 3.6.0.
Ini juga bisa menjadi cara yang baik untuk membedakan berbagai jenis proyek. Misalnya, proyek saya selalu
module.json
ada.Menggunakan ekstensi pengaktifan profil
Ada beberapa ekstensi Maven untuk aktivasi profil. Salah satunya di percabangan di sini:
https://github.com/OndraZizka/el-profile-activator-extension
sumber
<file><exists>.</exists></file>
Anda tidak dapat membiarkan profil default tetap aktif, tetapi Anda dapat mengambil konten profil itu (... dalam contoh Anda) dan hanya memindahkannya ke bagian utama pom.
Hanya karena Anda menggunakan profil, bukan berarti semua yang Anda lakukan harus ada dalam profil.
sumber