Tentang kami
Dalam 1C, kami mengembangkan tidak hanya
1C: platform
Perusahaan di
C ++ dan
JavaScript , tetapi juga aplikasi Java - khususnya, lingkungan pengembangan
Alat Pengembangan Perusahaan berbasis Eclipse dan server yang sangat terintegrasi dengan platform messenger -
Sistem Interaksi .
Entri
Paling sering, kami menggunakan pakar sebagai sistem untuk merakit aplikasi Java, dan dalam artikel singkat ini kami ingin berbicara tentang salah satu masalah yang harus kami tangani selama proses pengembangan dan pendekatan yang memungkinkan kami untuk mengatasi masalah ini.
Latar Belakang dan Alur Kerja
Karena spesifik pengembangan dalam proyek pakar kami, kami menggunakan banyak modul, dependensi dan proyek anak. Jumlah file pom dalam satu pohon bisa mencapai puluhan atau bahkan ratusan.

Tampaknya: tidak apa-apa, sekali dibuat dan dilupakan. Jika Anda perlu mengubah atau menambahkan sesuatu di semua file sekaligus, ada banyak alat praktis di editor dan IDE. Dan apa perubahan reguler paling umum ke pom.xml? Kami percaya bahwa mengubah versi proyek dan dependensi. Mungkin seseorang ingin berdebat dengan ini, tapi ini masalahnya dengan kita. Alasannya adalah bahwa, bersama dengan kernel, kami secara bersamaan mengembangkan banyak perpustakaan kami sendiri, dan untuk reproduksibilitas perakitan dan hasil pengujian yang konstan, penggunaan snapshots tampaknya tidak bagi kami merupakan pendekatan yang mudah. Untuk alasan ini, perlu untuk meningkatkan nomor versi dalam proyek-proyek di setiap majelis.
Juga, pengembang dari waktu ke waktu ada kebutuhan untuk mengumpulkan cabang perpustakaan dan memeriksa kinerjanya terhadap semua dependensi, yang semuanya harus secara manual mengubah versi.
Keputusan awal
Dengan perubahan versi yang sering dan banyak, proses dalam CI ingin disederhanakan dan otomatis. Di sini,
versi-maven-plugin plugin yang nyaman dan terkenal datang untuk menyelamatkan - kita pasang dan jalankan
mvn -N versi: set -DnewVersion = 2.0.1dan Maven akan melakukan segalanya sebagaimana mestinya: jalankan melalui hierarki dari atas ke bawah, ganti semua versi - keindahan! Sekarang tinggal menaikkan permintaan tarik, kolega akan menonton perubahan, dan Anda dapat dengan cepat bergabung dengan bagasi. Cepat? Bagaimanapun caranya. Beberapa ratusan
pom.xml per ulasan, dan itu tidak termasuk kode. Selain itu, tidak ada yang aman dari gabungan konflik dengan sejumlah besar file yang dimodifikasi. Perlu dicatat di sini bahwa selama proses CI, perubahan versi terjadi secara otomatis bersamaan dengan perubahan fungsionalitas, dan tidak secara terpisah.
Fitur baru
Untuk sementara, kami tenang dan hidup dalam damai, sampai orang-orang dari
Proyek Apache Maven termasuk dalam maven, mulai dengan versi 3.5.0-beta-1, dukungan untuk apa yang disebut "placeholder" versi (placeholder). Inti dari pengganti ini adalah bahwa variabel
$ {revisi} ,
$ {sha1} dan
$ {daftar perubahan} digunakan dalam
pom.xml alih-alih menentukan versi proyek. Nilai dari properti ini sendiri diatur dalam elemen <
properties >, atau mereka dapat didefinisikan melalui properti sistem
mvn -Drevision = 2.0.0 paket bersihNilai properti sistem lebih diutamakan daripada nilai yang didefinisikan dalam <
properti >.
Orang tua
<project>
<modelVersion> 4.0.0 </modelVersion>
<pihak>
<groupId> org.apache </groupId>
<artifactId> apache </artifactId>
<version> 18 </version>
</parent>
<groupId> org.apache.maven.ci </groupId>
<artifactId> ci-parent </artifactId>
<name> CI Friendly Pertama </name>
<version> $ {revisi} $ {sha1} $ {daftar perubahan} </version>
...
<properti>
<revision> 1.3.1 </revision>
<changelist> -SNAPSHOT </changelist>
<sha1 />
</properties>
</project>
Keturunan
<project>
<modelVersion> 4.0.0 </modelVersion>
<pihak>
<groupId> org.apache.maven.ci </groupId>
<artifactId> ci-parent </artifactId>
<version> $ {revisi} $ {sha1} $ {daftar perubahan} </version>
</parent>
<groupId> org.apache.maven.ci </groupId>
<artifactId> ci-child </artifactId>
...
</project>
Jika Anda ingin membangun versi 2.0.0-SNAPSHOT, maka gunakan saja
mvn -Drevision = 2.0.0 paket bersihJika Anda ingin membuat rilis, maka nolkan SNAPSHOT
mvn -Dchangelist = paket bersih* Contoh di atas diambil dari
artikel di situs web Proyek Apache Maven
Realitas yang keras
Semuanya baik dan sehat, saatnya merasakan kepuasan, tapi tidak. Ternyata untuk menginstal dan menggunakan metode ini tidak akan berfungsi, karena
$ {revisi} tidak akan digantikan oleh nilainya dalam deskripsi artefak yang diterbitkan dalam repositori dan pakar tidak akan mengerti apa itu semua.
<pihak>
<groupId> org.apache </groupId>
<artifactId> apache </artifactId>
<version> $ {revisi} </version>
</parent>
Cahaya di ujung terowongan
Kita harus mencari solusi untuk masalah ini. Situasi bisa saja diselamatkan oleh sebuah
flat-maven-plugin . Plugin ini memungkinkan semua variabel dalam pom, tetapi pada saat yang sama memotong satu ton informasi lain yang diperlukan hanya selama perakitan dan tidak diperlukan ketika mengimpor artefak yang diterbitkan ke proyek lain. Juga, plugin "meluruskan" semua dependensi orangtua-anak, dan sebagai hasilnya kita mendapatkan flat pom, yang mencakup semua yang Anda butuhkan. Ketidaknyamanannya adalah dia terlalu banyak memotong "terlalu banyak", yang sama sekali tidak cocok untuk kita. Setelah mempelajari informasi tentang pengembangan plugin ini, ternyata kita bukan satu-satunya di alam semesta, dan kembali pada Agustus 2018 permintaan-tarik dibuat pada github di repositori plugin dengan keinginan untuk memungkinkannya menentukan secara mandiri bagaimana cara "merusak" pom.xml. Pengembang mendengarkan suara-suara orang yang tertimpa bencana, dan sudah pada bulan Desember, dengan merilis versi baru 1.1.0, mode resolCiFriendliesOnly yang baru muncul dalam flatten-maven-plugin, yang tidak seperti sebelumnya - ia meninggalkan pom.xml sebagaimana adanya, kecuali untuk elemen
<version> dan memungkinkan
$ {revisi} ,
$ {sha1} dan
$ {daftar perubahan} .
Tambahkan plugin ke proyek
<plugins>
<plugin>
<groupId> org.codehaus.mojo </groupId>
<artifactId> flatten-maven-plugin </artifactId>
<version> 1.1.0 </version>
<konfigurasi>
<updatePomFile> true </updatePomFile>
<flattenMode> resolCiFriendliesOnly </flattenMode>
</configuration>
<Eksekusi>
<eksekusi>
<id> ratakan </id>
<phase> sumber daya proses </phase>
<tujuan>
<goal> ratakan </goal>
</goals>
</execution>
<eksekusi>
<id> flatten.clean </id>
<phase> bersih </phase>
<tujuan>
<goal> bersih </goal>
</goals>
</execution>
</eksekusi>
</plugin>
</plugins>
Selesai!
Selamat berakhir
Mulai sekarang, untuk mengubah versi seluruh proyek dan membiarkan semua dependensi mengetahuinya, kita hanya perlu mengedit elemen <
revisi > hanya dalam satu
pom.xml root. Bukan seratus atau dua file ini dengan perubahan yang sama yang terbang ke tinjauan, tetapi satu. Yah, tidak perlu menggunakan
versi-maven-plugin .