Pengalaman menggunakan plugin flatten-maven untuk menyederhanakan pembuatan versi dalam proyek maven

Tentang kami

Di 1C kami tidak hanya mengembangkan platform 1C: Perusahaan pada C ++ ΠΈ JavaScript, tetapi juga aplikasi Java - khususnya lingkungan pengembangan baru Alat Pengembangan Perusahaan berdasarkan Eclipse dan server messenger yang terintegrasi secara mendalam dengan platform - Sistem Interaksi.

Masuk

Kami paling sering menggunakan maven sebagai sistem pembangunan untuk aplikasi Java, dan dalam artikel singkat ini kami ingin berbicara tentang salah satu masalah yang harus kami hadapi dalam proses pengorganisasian pengembangan, dan tentang pendekatan yang memungkinkan kami untuk mengatasinya. masalah.

Prasyarat dan alur kerja

Karena kekhususan pengembangan dalam proyek pakar kami, kami menggunakan cukup banyak modul, dependensi, dan proyek turunan. Jumlah file pom dalam satu pohon bisa mencapai puluhan bahkan ratusan.

Pengalaman menggunakan plugin flatten-maven untuk menyederhanakan pembuatan versi dalam proyek maven

Tampaknya: bukan masalah besar, mereka membuatnya sekali dan melupakannya. Jika Anda perlu mengubah atau menambahkan sesuatu di semua file sekaligus, ada banyak alat yang mudah digunakan di editor dan IDE. Apa perubahan reguler yang paling umum pada pom.xml? Kami percaya bahwa perubahan dalam versi dan ketergantungan proyek. Mungkin seseorang ingin berdebat dengan hal ini, tetapi inilah yang terjadi pada kita. Alasannya terletak pada kenyataan bahwa, bersama dengan kernel, kami secara bersamaan mengembangkan banyak perpustakaan kami sendiri, dan agar hasil build dan pengujian dapat direproduksi secara konstan, penggunaan snapshot tampaknya bukan pendekatan yang nyaman bagi kami. Untuk alasan ini, nomor versi dalam proyek perlu ditingkatkan pada setiap build.

Selain itu, dari waktu ke waktu, pengembang perlu membangun cabang perpustakaannya sendiri dan memeriksa fungsinya terhadap semua dependensi, sehingga ia harus mengubah versi semuanya secara manual.

Solusi awal

Dengan perubahan versi yang sering dan berulang, saya ingin menyederhanakan dan mengotomatiskan proses dalam CI. Di sinilah plugin yang nyaman dan terkenal bisa membantu. versi-maven-plugin - sambungkan dan luncurkan

mvn -N versi:set -DnewVersion=2.0.1

dan Maven akan melakukan segalanya sebagaimana mestinya: ia akan berjalan melalui hierarki dari atas ke bawah, menggantikan semua versi - cantik! Sekarang yang tersisa hanyalah mengajukan permintaan tarik, kolega akan meninjau perubahannya, dan Anda dapat dengan cepat bergabung dengan trunk. Dengan cepat? Tidak peduli bagaimana keadaannya. Beberapa ratus pom.xml untuk ditinjau, dan ini belum termasuk kodenya. Selain itu, tidak ada yang kebal dari konflik penggabungan dengan begitu banyak file yang diubah. Perlu dicatat di sini bahwa dalam proses CI, perubahan versi terjadi secara otomatis seiring dengan perubahan fungsionalitas, dan tidak secara terpisah.

Fitur baru

Untuk sementara kami menenangkan diri dan, setelah berdamai, kami hidup seperti itu sampai orang-orang keluar Proyek Apache Maven Mulai dari versi 3.5.0-beta-1, Maven tidak menyertakan dukungan untuk apa yang disebut β€œplaceholder”. Inti dari pengganti ini adalah itu pom.xml alih-alih indikasi spesifik versi proyek, variabel digunakan ${revisi}, ${sha1} ΠΈ ${daftar perubahan}. Nilai dari properti ini sendiri diatur dalam elemenproperties>, atau dapat ditentukan melalui properti sistem

mvn -Drevision=2.0.0 paket bersih

Nilai properti sistem lebih diutamakan daripada nilai yang ditentukan dalamproperties>.

Orang tua

  4.0.0
  
    org.apache
    apache
    18
  
  org.apache.maven.ci
  ci-orang tua
  Ramah CI Pertama
  ${revisi}${sha1}${daftar perubahan}
  ...
  
    1.3.1
    -FOTO
    
  


Keturunan

  4.0.0
  
    org.apache.maven.ci
    ci-orang tua
    ${revisi}${sha1}${daftar perubahan}
  
  org.apache.maven.ci
  ci-anak
   ...

Jika ingin membangun versi 2.0.0-SNAPSHOT, gunakan saja

    mvn -Drevision=2.0.0 paket bersih

Jika ingin membuat rilis, maka reset saja SNAPSHOT

    mvn -Dchangelist= paket bersih

*Contoh di atas diambil dari Artikel di situs web Proyek Maven Apache

Kenyataan yang pahit

Semuanya baik-baik saja dan sehat, saatnya merasakan rasa puas, tapi tidak. Ternyata metode ini tidak akan berfungsi untuk instalasi dan penerapan, karena tidak akan diganti dalam deskripsi artefak yang dipublikasikan di repositori ${revisi} tentang maknanya dan pakar tidak akan lagi memahami maksudnya.


    org.apache
    apache
    ${revisi}

Cahaya di ujung terowongan

Kita perlu mencari solusi untuk masalah ini. Bisa menyelamatkan situasi plugin-maven-ratakan. Plugin ini menyelesaikan semua variabel di pom, tetapi pada saat yang sama menghilangkan banyak informasi lain yang hanya diperlukan selama perakitan dan tidak diperlukan saat mengimpor artefak yang diterbitkan ke proyek lain. Plugin ini juga β€œmeluruskan” semua ketergantungan orangtua-anak, dan sebagai hasilnya, Anda mendapatkan pom datar yang mencakup semua yang Anda butuhkan. Ketidaknyamanannya adalah terlalu banyak "ekstra" yang dipotong, yang tidak cocok untuk kami sama sekali. Setelah mempelajari informasi tentang pengembangan plugin ini, ternyata kita bukan satu-satunya di alam semesta, dan pada bulan Agustus 2018, sebuah pull-request dibuat di Github di repositori plugin dengan keinginan untuk mewujudkannya. untuk menentukan sendiri bagaimana cara β€œmerusak” pom.xml. Para pengembang mendengarkan suara-suara mereka yang menderita, dan pada bulan Desember, dengan dirilisnya versi baru 1.1.0, mode baru, resolusiCiFriendliesOnly, muncul di plugin flatten-maven, yang lebih cocok dari sebelumnya - ia pergi pom.xml apa adanya, kecuali elemennya dan memungkinkan ${revisi}, ${sha1} ΠΈ ${daftar perubahan}.

Menambahkan plugin ke proyek


  
    org.codehaus.mojo
    plugin-maven-ratakan
    1.1.0
    
      BENAR
      menyelesaikanCiFriendliesOnly
    
    
      
        meratakan
        sumber daya proses
        
          meratakan
        
      
      
        ratakan.bersihkan
        membersihkan
        
          membersihkan
        
      
    
  

Selesai!

Akhir yang bahagia

Mulai sekarang, untuk mengubah versi keseluruhan proyek dan memberi tahu semua dependensi, kita hanya perlu mengedit elemennyarevisi> hanya di root saja pom.xml. Bukan seratus atau dua file dengan perubahan yang sama yang sampai pada tinjauan, tetapi satu. Yah, tidak perlu digunakan versi-maven-plugin.

Sumber: www.habr.com

Tambah komentar