Proje konusundan kendi projenize¶
Bu sayfa Calculator örneğini gerçek bir ders projesine dönüştürmeyi, somut bir örnek konuyla anlatır:
"Kütüphane Kitap Takip Sistemi" (küçük bir kütüphane kataloğu + ödünç takibi - ders proje kılavuzundan seçtiğiniz
konuyu buraya koyun, adımlar aynı).
Kontrol listesi¶
- [ ]
project.enviçine adınızı yazın (PROJECT_NAME,VERSION,GITHUB_REPO) - proje kimliğinin TEK yeri - [ ] Maven
groupId'yi ve Java paketini yeniden adlandırın - [ ] Kaynak klasörlerini yeni pakete uyacak şekilde yeniden adlandırın
- [ ]
Calculator/CalculatorApp'i kendi alan (domain) sınıflarınızla değiştirin - [ ]
pom.xml'in<name>/<description>/<url>/shademainClass'ını güncelleyin - [ ]
Doxyfile'ınPROJECT_NAME/PROJECT_BRIEF/INPUT'unu güncelleyin - [ ]
calculator-app/src/site/site.xml'in banner/bağlantılarını güncelleyin (ya da olduğu gibi bırakın - geneldir) - [ ] Her yeni modül için önce test yazın (normal, sınır, geçersiz girdi - aşağıya bakın)
- [ ] Her değişiklikten sonra
6-build-and-test-*(ve push'tan önce7-build-all-*) çalıştırın, kapsama rozetlerini/raporlarını kontrol edin - [ ]
README.md'nin başlığını ve açıklamasını güncelleyin - [ ] Erken ve sık commit edin (bakınız workflow.md)
1. Projeyi ve Maven koordinatlarını adlandırın¶
Önce depo kökündeki project.env - her betik, sürüm dosyası adları ve site onu okur:
PROJECT_NAME=librarytracker
VERSION=0.1.0
GITHUB_REPO=<hesabiniz>/<depo-adiniz>
Dosyalar böylece librarytracker-0.1.0-windows-x64-app.zip vb. olur (Adlandırma standardı).
Sonra calculator-app/pom.xml:
calculator-app/pom.xml içinde:
<groupId>com.ucoruh.librarytracker</groupId>
<artifactId>library-tracker-app</artifactId>
<name>library-tracker-app</name>
<description>Kütüphane Kitap Takip Sistemi - dönem projesi</description>
Shade eklentisinin mainClass'ı yeni giriş noktası sınıfınızı göstermeli (adım 3):
<mainClass>com.ucoruh.librarytracker.LibraryTrackerApp</mainClass>
En basit ve güvenli yol: modül klasörünü ve artifactId'yi calculator-app olarak bırakın - betikler, Doxyfile,
mkdocs.yml ve CI o klasöre başvurur; kullanıcılarınızın gördüğü adlar (dosyalar, site, uygulama arşivindeki jar)
artifactId'den değil PROJECT_NAME'den gelir. Yalnızca groupId, <name>, <description> ve yukarıdaki
<mainClass>'ı değiştirin. (Klasörü de yeniden adlandırmakta ısrar ederseniz, depoda calculator-app arayın ve
betiklerdeki, Doxyfile, mkdocs.yml, .github/workflows/ci.yml ve .gitignore içindeki her eşleşmeyi değiştirin.)
2. Paketi ve klasörleri yeniden adlandırın¶
# depo kökünden
git mv calculator-app/src/main/java/com/ucoruh/calculator calculator-app/src/main/java/com/ucoruh/librarytracker
git mv calculator-app/src/test/java/com/ucoruh/calculator calculator-app/src/test/java/com/ucoruh/librarytracker
Ardından taşıdığınız her .java dosyasının başındaki package com.ucoruh.calculator; satırını
package com.ucoruh.librarytracker; yapın ve başka yerlerdeki her import com.ucoruh.calculator....'u güncelleyin.
3. Örnek sınıfları kendi alanınızla değiştirin¶
Şablonun ayrımı kasıtlıdır ve yapmanız gerekeni yansıtır:
- kütüphane sınıfları (Calculator) gerçek mantığı taşır, düzdür, yazdırmak yerine değer döndürür ve iyice
birim test edilmiştir.
- uygulama sınıfı (CalculatorApp) ince bir giriş noktasıdır: args'ı ayrıştırır, kütüphaneyi çağırır,
sonucu yazdırır - başka hiçbir şey yapmaz - ve ayrıştırma mantığı main'in İÇİNDE değil, küçük, test edilebilir
bir metotta yaşar (run(String[] args)) ve asla System.in'den okumaz (öyle yapsaydı bir betik veya CI işi
sonsuza dek asılı kalırdı).
"Kütüphane Kitap Takip Sistemi" için bu şöyle olabilir:
- Book.java, Loan.java, LibraryCatalog.java (kütüphane: kitap ekle/çıkar, kitap ödünç ver, geri al, gecikmiş
ödünçleri listele - konunuzun ders kılavuzunun istediği her ne ise) - her biri eşleşen bir *Test.java ile.
- LibraryTrackerApp.java, küçük bir alt-komut kümesini (örn. add-book, checkout, return, list-overdue)
LibraryCatalog'a yönlendiren bir static String run(String[] args) ve yalnızca run(args)'ın sonucunu
yazdıran bir main içerir - tıpkı bugün CalculatorApp'in yaptığı gibi.
4. Önce testleri yazın¶
Kütüphane sınıflarınızın her genel (public) metodu için en az şunları yazın:
- bir normal durum (tipik, beklenen girdi)
- bir sınır (boundary) durumu (boş koleksiyon, sıfır/bir/çok, ilk/son eleman, Integer.MAX_VALUE tarzı sınırlar)
- bir geçersiz girdi durumu (null, var olmayan bir kitap kimliği, zaten ödünçte olan bir kitabı ödünç verme) -
seçtiğiniz istisnayı fırlattığını ya da seçtiğiniz hata değerini döndürdüğünü doğrulayın; kazayla belgelenmemiş bir
NullPointerException fırlatmasına izin vermeyin.
CalculatorTest.java ve CalculatorAppTest.java tam olarak bu örüntünün işlenmiş örnekleridir (JUnit 5,
normal/sınır/geçersiz durumları gruplayan @Nested sınıflar, assertThrows, sınır tabloları için
@ParameterizedTest + @CsvSource) - içeriği değil örüntüyü kopyalayın.
5. Doxygen'i ve siteyi güncelleyin¶
Doxyfile (çıktı klasörü ve PROJECT_NUMBER betiklerden gelir - o iki satıra dokunmayın):
PROJECT_NAME = "Kütüphane Kitap Takip Sistemi"
PROJECT_BRIEF = "Küçük bir kütüphane kataloğu ve ödünç takip sistemi"
INPUT = calculator-app/src/main/java
mkdocs.yml (site_name, site_description, repo_url) ve açılış sayfası docs/index.en.md / docs/index.tr.md; Maven sitesi
banner'ı (calculator-app/src/site/site.xml) geneldir, olduğu gibi kalabilir.
6. Yeniden derleyin ve kontrol edin¶
7-build-all-windows.bat
9-open-site-windows.bat
./7-build-all-linux.sh ve ./9-open-site-linux.sh.)
Siteyi açın, Which report is which? sayfasını kontrol edin ve şunları doğrulayın:
- birim test raporu tüm yeni testlerinizi, hepsi yeşil olarak gösteriyor
- JaCoCo ve ReportGenerator ikisi de yeni sınıflarınız için gerçek kapsama sayıları gösteriyor (0% değil, ve eski
Calculator sınıfı değil - o kaybolmuş olmalı)
- Javadoc ve Doxygen ikisi de yeni sınıflarınızı yeni Javadoc yorumlarınızla gösteriyor
7. Devam edin¶
- workflow.md - günlük branch/commit/push döngüsü ve CI'nin ne yaptığı
- releases.md - notlandırılacak bir anlık görüntüyü (snapshot) nasıl yayımlarsınız
- troubleshooting.md - yukarıdakileri yaparken karşılaşmanız en olası hataların düzeltmeleri