Saya menggunakan maven 3.0.4 dan ingin membuat cap waktu build dapat diakses oleh aplikasi saya. Untuk ini, saya meletakkan placeholder di .properties
file dan membiarkan maven memfilter pada build. Meskipun ini berfungsi dengan baik ${project.version}
, ${maven.build.timestamp}
tidak diganti dengan penyaringan.
Properti tampaknya tersedia saat dibangun - saya dapat menggunakannya untuk mengubah nama artefak:
<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
Jadi mengapa itu tidak tersedia untuk pemfilteran sumber daya? Dan, yang lebih penting, bagaimana cara membuatnya dapat diakses?
target/${project}
folder, tetapi dalam konfigurasi aktual saya Tomcat tidak menggunakan folder ini ...maven.build.timestamp.format
beberapa kali?${timestamp}
dengan string literal${maven.build.timestamp}
.buildTimestamp=@timestamp@
Saya dapat mengonfirmasi pada Maven 3.x
{maven.build.timestamp}
"bekerja" sekarang. Mereka bekerja arounded masalah, rupanya. Tidak ada tambahanproperties
perlu solusi lagi.Namun, hati-hati plugin "filtering" Anda (maven-resources-plugin) adalah yang terbaru. Ini perlu relatif baru, jadi jika
mvn help:effective-pom
menunjukkan versi lama (mis .: 2.6), ubah ke sesuatu yang lebih baru, perbaiki untuk saya, 3.x ex:<properties><timestamp>...
solusi tidak lagi diperlukan ...Ini juga menjelaskan, mengapa itu berfungsi di IntelliJ tetapi tidak di baris perintah. IntelliJ mungkin menggunakan konstanta maven "diubah / internal" mereka sendiri, jadi IntelliJ berfungsi di sana, tetapi tidak dari baris perintah maven.
Perhatikan juga jika Anda menambahkan direktori resource pemfilteran ke you pom, Anda mungkin juga perlu "menambahkan kembali" direktori default, direktori tersebut akan hilang, misalnya:
NB jika Anda menggunakan boot musim semi sebagai orang tua, Anda harus menggunakan @ maven.build.timestamp @ sebagai gantinya . Juga perhatikan jika Anda menggunakan boot musim semi ada file
META-INF/build-info.properties
yang secara opsional dibuat olehspring-boot-maven-plugin
yang dapat Anda baca (musim semi menyediakanBuildProperties
kacang untuk kenyamanan membacanya).sumber
<webResources><resource><filtering>
) :-( lihat MWAR-415 -> jadi masih harus menggunakan solusi di sana<properties><timestamp>...
solusi alternatif. Lihat juga issues.apache.org/jira/browse/MASSEMBLY-603Untuk memperkaya konten Stackoverflow bagi orang lain, yang seperti saya, menemukan posting ini sebagai cara untuk memecahkan "masalah" dari
${maven.build.timestamp}
. Ini bukan bug maven, tapi perilaku m2e yang diharapkan, seperti yang bisa dilihat di posting ini .Oleh karena itu, saya percaya bahwa kita tidak dapat mengharapkan solusi untuk "dikoreksi", karena dari apa yang saya pahami, koreksi melibatkan masalah konseptual.
Dalam kasus saya, yang saya lakukan adalah menggunakan plugin (
buildnumber-maven-plugin
) seperti yang dijelaskan di posting lain ini .sumber
buildnumber-maven-plugin
masalah serupa, yaitu variabel yang dihasilkannya hanya tersedia dalam konteks tertentu, BUKAN pemfilteran. Anda mungkin atau mungkin tidak dapat mengatasinya dengan mengutak-atik fase atau tujuan eksekusi, tetapi solusi bawaan tampaknya jauh lebih sederhana.Menambahkan properti Maven di level project pom tidak memperhitungkan Zona Waktu lokal yang benar, sehingga stempel waktu mungkin terlihat salah:
Menggunakan build-helper-maven-plugin menerapkan zona waktu yang benar dan waktu musim panas saat ini ke stempel waktu:
Saat memaketkan, Maven akan mengganti stempel waktu token apa pun di folder / resource, misalnya resource / version.properties:
build.timestamp = $ {timestamp}
Anda kemudian dapat memuat file properti ini di Aplikasi Anda.
sumber