Rumah  >  Artikel  >  Java  >  Kesilapan ribu dolar satu baris - SBT + PlayFramework

Kesilapan ribu dolar satu baris - SBT + PlayFramework

PHPz
PHPzasal
2024-07-17 16:05:23329semak imbas

The thousand dollars one line mistake - SBT + PlayFramework

Pada masa kini semua orang bercakap tentang betapa pentingnya untuk memiliki pengalaman pembangun yang baik, kerana ia akan mempunyai banyak kesan sampingan yang baik, seperti tetapi tidak terhad kepada:

  • Kelajuan pembangunan / Produktiviti

  • Kualiti / Penyelenggaraan kod

  • Menjimatkan kos, dsb

Walau bagaimanapun, selalunya kami membuat projek yang pada suatu ketika dahulu, sekeping kod kecil telah ditambahkan untuk mempercepatkan projek itu, atau malah untuk membetulkan sesuatu, mungkin seseorang cuba membuat binaan dengan lebih pantas, atau malah cuba memberikan pengalaman pembangunan yang lebih baik kepada jurutera. Ini adalah kes dalam cerita ini.

Beberapa tahun lalu, dalam projek yang kami usahakan (sebelum saya menjadi sebahagian daripada syarikat itu) isu dengan membina SBT, Scala dan rangka kerja bermain, telah dikenal pasti, di mana masa penyusunan untuk membina projek secara tempatan mengambil masa sekitar 3 hingga 5 minit bergantung pada mesin. Percubaan untuk membetulkan isu telah dibuat. Struktur projek dibahagikan kepada 2 seperti di bawah:
Sebelum ini

ProjectA
  /api
 /core
 /app

Selepas

ProjectA
 /core
 /app

ProjectApi
  /api

Yang berikut telah ditambahkan pada build.sbt

lazy val projectA = (project in file("."))
  .enablePlugins(...)
  .settings(commonSettings)
  .aggregate(api)
  .dependsOn(api)

lazy val api = project.settings(commonSettings)

Dengan berbuat demikian, ia telah meningkatkan masa penyusunan, hanya semasa membina saluran paip CI, saya tidak pasti sama ada ia membantu semasa fasa pembangunan, namun, ia menambah pepijat baharu dan mengerikan yang membuatkan pembangun membazirkan beribu-ribu masa bekerja.

Selepas baris ini ditambahkan, pembangun mula menyedari berapa lama masa yang diambil hanya untuk menjalankan yang mudah
sbt dijalankan secara tempatan, bagi setiap perubahan dalam pangkalan kod sekarang, kompilasi penuh diperlukan.

Perjalanan untuk memahami isu

Seperti yang didokumenkan dalam manual rujukan SBT - Multiproject

Adalah penting untuk diperhatikan dua takrifan Pengagregatan dan bergantung pada

Pengagregatan bermakna menjalankan tugas pada projek agregat juga akan menjalankannya pada projek agregat

Sesuatu projek mungkin bergantung pada kod dalam projek lain. Ini dilakukan dengan menambah panggilan kaedah dependeOn. Contohnya, jika teras memerlukan util pada laluan kelasnya.

Selepas menghabiskan satu atau dua hari membaca dokumen dan banyak percubaan yang kecewa untuk membetulkan isu itu, saya akhirnya tiba di Github ini - Penyusunan semula palsu dalam binaan berbilang projek Ini bukan pembetulan itu sendiri, bagaimanapun, memberi saya pencerahan pada akhirnya daripada terowong untuk memahami masalah itu sememangnya dengan persediaan berbilang projek.

Dan lebih jauh lagi, saya memahami apa yang berlaku, dan oleh itu, kini fail build.sbt saya semudah:

lazy val projectA = (project in file("."))
  .enablePlugins(...)
  .settings(commonSettings)
  .dependsOn(api)

lazy val api = (project in file("api"))
  .settings(commonSettings)

Terdapat masalah dengan cara kami menyediakan projekA dalam SBT. Kami memberitahu SBT untuk memasukkan API projek (yang betul), tetapi definisi API menunjuk kepada keseluruhan akar projek. Ini bermakna:

Setiap kali API memerlukan penyusunan, SBT juga akan cuba menyusun projekA itu sendiri.
Memandangkan projectA memerlukan API untuk menyusun, ia akan mencetuskan kompilasi API yang lain.
Ini mencipta gelung yang tidak berkesudahan, memaksa pembangun untuk membunuh SBT dan membersihkan serta menyusun segala-galanya secara manual untuk setiap perubahan kod.
Inilah yang berlaku dalam istilah yang lebih mudah:

Kami memberitahu SBT untuk memasukkan API projek.
Takrifan API menunjuk kepada keseluruhan projek.
Penyusunan API mencetuskan penyusunan projek penuh (termasuk API sekali lagi).
Gelung ini menjadikan SBT sangat perlahan dan mengecewakan pembangun.

Pasukan telah menangani masalah ini sekurang-kurangnya 4 tahun...

Selepas - membetulkan isu

Selepas saya berkata kepada rakan sepasukan bahawa saya mempunyai ciri kejutan yang telah digabungkan pada master, orang ramai tidak faham apa yang berlaku, namun, saya mahu melihat kegembiraan di wajah mereka, saya memberitahu seluruh pasukan untuk menarik master ke mana-mana cawangan yang mereka sedang kerjakan, sesetengah daripada mereka tidak menyedari apa-apa dalam percubaan pertama, yang lain mula menyedari bahawa selepas menukar mana-mana kod dalam pangkalan kod, ia hanya menyusun fail yang terjejas dalam beberapa saat, bukan beberapa minit seperti sebelum ini. Dan kejutan terbaik adalah apabila salah seorang rakan sepasukan menyedari dan berkata dengan kuat di pejabat.

Gust ... adakah anda membetulkan isu gelung kompilasi? Saya sedang mengusahakan sesuatu di sini dan saya mendapat maklum balas segera untuk sebarang perubahan dalam kod.

Pada masa itu saya terpaksa mengakui dan, berkongsi berita dengan semua jurutera lain, ia menjadikan saya seorang jurutera yang lebih gembira kerana kini saya gembira bekerja pada projek ini dan tidak menunggu tempoh masa yang lama untuk kompilasi penuh projek kami .

Jika anda merasakan sesuatu adalah cara kami, bila-bila masa anda berada, apa sahaja yang anda lakukan, ingat anda mempunyai peluang untuk menjadikannya lebih baik, jangan lupa apa yang telah anda mulakan.

Jika anda suka membaca artikel ini atau ingin ia mempunyai lebih banyak kandungan, sila beritahu saya dalam komen, saya gembira untuk berkongsi lebih lanjut tentang perjalanan ini.

Terima kasih kerana membaca.

Beberapa statistik daripada projek:

Permulaan projek:

  • Sekitar 4 ribu fail Java

  • Kira-kira 300 templat Twirl

  • Kompilasi masa sebelum penambahbaikan 3 hingga 5 minit untuk sebarang perubahan dalam kod

  • Masa penyusunan selepas purata peningkatan 1 minit dan 20 saat untuk penyusunan penuh

  • Kompilasi masa selepas purata peningkatan 5 hingga 10 saat untuk sebarang perubahan dengan maklum balas segera ( paling banyak masa yang diluangkan ialah Playframework memulakan semula Pelayan HTTP )

Imej muka depan yang dibuat oleh AI.

Atas ialah kandungan terperinci Kesilapan ribu dolar satu baris - SBT + PlayFramework. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Literal di JawaArtikel seterusnya:Literal di Jawa