# Gemini CLI ile Spring Boot Projelerinde Kodlama Rehberi

Adres: https://agentvera.dev/blog/gemini-cli-ile-spring-boot/ · Yayın: 2026-11-01

Gemini CLI’nin Spring Boot projelerinde nasıl kullanılacağını adım adım öğrenin: GEMINI.md hazırlığı, çalışma döngüsü, testler ve çoklu ajan yönetimi.

**Kısaca:**

- Gemini CLI, proje klasöründe gemini komutuyla başlar ve GEMINI.md dosyasındaki Spring Boot kurallarına uyar.
- Küçük görevler verip her adımda Maven veya Gradle testlerini çalıştırmak en güvenli çalışma döngüsüdür.
- Testcontainers ve JUnit 5 ile doğrulama yapılır; diff incelenerek beklenmeyen katman ihlalleri yakalanır.

Gemini CLI, proje klasöründe `gemini` komutuyla başlattığınız bir kodlama ajanıdır. Spring Boot projesinde controller, service ve repository katmanlarını anlayarak görev alır; Maven veya Gradle çıktılarını yorumlar, JUnit 5 ve Testcontainers ile test yazar. Kurulum ve temel kullanım için [Gemini CLI](/ajanlar/gemini-cli/) sayfasına, adım adım anlatım için [Gemini CLI nasıl kullanılır? Adım adım rehber](/blog/gemini-cli-nasil-kullanilir/) rehberine bakabilirsiniz.

## Gemini CLI Spring Boot projelerinde neden iyi çalışır?
Spring Boot projeleri güçlü bir konvansiyona sahiptir: katmanlı paket yapısı, stereotip anotasyonlar ve tahmin edilebilir build çıktısı. Gemini CLI pom.xml veya build.gradle dosyasını okur; mevcut bağımlılıkları ve Java sürümünü görür. `@RestController`, `@Service`, `@Repository` ve `@Entity` ilişkilerini tanıyarak yeni kodun mevcut mimariye uymasını sağlar. Özellikle tekrar eden işlerde (CRUD endpoint’leri, DTO mapping, repository sorguları) ve hata ayıklamada faydalıdır. Ayrıca Maven veya Gradle hata çıktılarını okuyup doğrudan çözüm üretebilir; test raporlarındaki stacktrace’leri yorumlayarak başarısız testleri düzeltmeye çalışır.

Ancak ajan bir mimar değildir. Proje kurallarınızı GEMINI.md ile netleştirdiğinizde çok daha tutarlı sonuç verir. Örneğin, constructor injection zorunluluğu, DTO kullanımı ve test stratejisi yazılmazsa ajan eski alışkanlıklarına dönebilir. Bu yüzden aşağıdaki kurulum bölümüne dikkat edin.

## GEMINI.md ile proje hazırlığı
Gemini CLI proje kökündeki GEMINI.md dosyasını okur. Spring Boot projesi için bu dosyada build, test ve biçim komutlarını, paket düzenini ve katman kurallarını belirtin. Özellikle Maven wrapper veya Gradle wrapper kullanın; böylece ajan, sistemdeki farklı Java veya build tool versiyonlarından etkilenmez. Aşağıdaki örnek, Maven ve Gradle için ortak bir şablondur:

```markdown
# GEMINI.md

## Komutlar
- Build: `./mvnw -q -DskipTests package` veya `./gradlew build -x test`
- Test: `./mvnw test` veya `./gradlew test`
- Tek test: `./mvnw -Dtest=OrderServiceTest test` veya `./gradlew test --tests "*OrderServiceTest"`
- Biçim kontrolü: `./mvnw spotless:check` veya `./gradlew spotlessCheck`

## Paket düzeni
- Controller: `src/main/java/com/ornek/proje/controller`
- Service: `src/main/java/com/ornek/proje/service`
- Repository: `src/main/java/com/ornek/proje/repository`
- DTO ve request/response: `src/main/java/com/ornek/proje/dto`
- Exception handler: `src/main/java/com/ornek/proje/exception`
- Config: `src/main/java/com/ornek/proje/config`

## Kurallar
- Java 21, Spring Boot 3.x
- Constructor injection zorunlu; field injection kullanma
- Entity'leri controller'a döndürme; DTO kullan
- Servis sınırlarında @Transactional kullan; self-invocation'a dikkat et
- Testlerde JUnit 5 ve Testcontainers kullan; H2 yerine gerçek veritabanı konteyneri tercih et
- Her değişiklikten sonra ilgili testleri çalıştır, tüm suite'i en son bırak
- `@ConfigurationProperties` kullan; property değerlerini sabit kodlama
```

Bu dosya, ajanın her görevde aynı komutları kullanmasını sağlar. Yeni bir modül veya profile eklediğinizde GEMINI.md’yi güncelleyin; ajan bu dosyayı her oturumda okur. Eğer çok modüllü bir Maven projeniz varsa `-pl` parametresini de ekleyebilirsiniz, ancak basit Spring Boot projeleri için yukarıdaki şablon yeterlidir.

## Çalışma döngüsü ve örnek komutlar
Sağlıklı bir döngü şöyledir: görevi net tanımlayın, ajanın küçük bir adım atmasını isteyin, ilgili testleri çalıştırın ve `git diff` ile değişikliği inceleyin. Büyük bir refaktörü tek seferde istemek yerine katman katman ilerleyin; önce entity ve DTO, sonra repository, sonra service ve controller şeklinde gidin. Her adımdan sonra ajanın önerdiği diff’i inceleyin. Özellikle `application.properties`, `pom.xml` veya `build.gradle` gibi merkezi dosyalarda beklenmedik değişiklikler varsa geri alın. Testler geçmeden bir sonraki göreve geçmeyin. Aşağıdaki tablo tipik Spring Boot görevleri için iyi prompt örnekleri gösterir:

| Görev | İyi prompt |
|-------|------------|
| Validation eklemek | `UserController'daki POST /users endpoint'ine Jakarta Validation kuralları ekle; geçersiz email için 400 dönecek şekilde test yaz.` |
| Transaction yönetimi | `OrderService.createOrder metodunu transactional yap, stok azaltma ile aynı transaction'da çalışsın; eksik stok için exception fırlat ve testini ekle.` |
| Repository sorgusu | `ProductRepository'e son 10 ürünü tarihe göre getiren bir metod ekle, service'te kullan ve JUnit testi yaz.` |
| Build hatası düzeltme | `Aşağıdaki test başarısız oluyor: [stacktrace]. Nedenini bul ve düzelt, gerekirse testi güncelle.` |
| DTO dönüşümü | `Order entity'sini OrderResponse DTO'suna maple; MapStruct kullanmadan basit bir mapper yaz ve test et.` |

Bu promptlarda görev net, kabul kriteri test ile doğrulanabilir ve bağlam kodda mevcuttur. Ajanın tahmin yapmasına izin vermeyin; eksik bilgi varsa önce size sor. Örneğin, yeni bir endpoint eklerken request/response formatını belirtmezseniz varsayılan alanlar üretebilir.

## Spring Boot’ta iyi sonuç alınan işler ve dikkat edilecekler
Gemini CLI; controller endpoint’leri oluşturma, Jakarta Validation ekleme, Spring Data JPA repository metodları yazma, DTO dönüştürme, JUnit 5 ve Testcontainers ile test yazma, build/test hatalarını çözme gibi tekrar eden işlerde iyidir. Ayrıca Spring Boot 3 geçişlerinde `javax.*` yerine `jakarta.*` importlarını düzeltmekte faydalıdır. Ancak şu noktalarda dikkatli olun:

- **Field injection veya setter injection önerebilir.** Constructor injection GEMINI.md’de zorunlu tutulmalı ve her diff’te kontrol edilmelidir.
- **LazyInitializationException.** Ajan, lazy ilişkileri transaction dışında çağırabilir. Servis metodlarına `@Transactional` ekleyin veya `@EntityGraph` ile fetch join kullanın.
- **N+1 sorgu.** Repository metodları yazarken döngülerle ilişki yükleyebilir. SQL loglarını açın ve `@EntityGraph` veya `JOIN FETCH` önerin.
- **Tüm context’i yükleme.** Ajan, her test için `@SpringBootTest` kullanırsa testler yavaşlar. `@WebMvcTest`, `@DataJpaTest` gibi slice testleri isteyin; yalnızca gerçek entegrasyon için `@SpringBootTest` kullanın.
- **Transaction self-invocation.** Ajan, aynı sınıf içindeki private method çağrısında `@Transactional` çalışmadığını unutabilir. Proxy mekanizmasını hatırlatın veya AspectJ modunu önerin.
- **Exception handling.** Her controller’a try-catch eklemek yerine `@RestControllerAdvice` ile global handler kullanmasını isteyin.
- **Property sabitleme.** `application.yml` içindeki değerleri kod içinde sabitleyebilir; `@ConfigurationProperties` kullanmasını söyleyin.
- **Docker bağımlılığı.** Testcontainers testleri çalıştırmadan önce Docker’ın açık olması gerekir; ajan bu kontrolü yapmaz, testler askıda kalabilir.

## Test ve doğrulama
Gemini CLI’ya her değişiklikten sonra test çalıştırmasını söyleyin. Önce ilgili test sınıfını çalıştırın: `./mvnw -Dtest=OrderServiceTest test` veya Gradle karşılığı. Ardından tüm suite’i `./mvnw test` ile doğrulayın. Entegrasyon testleri için Testcontainers ile gerçek PostgreSQL veya MySQL konteyneri kullanın; H2’yi yalnızca hızlı unit testlerde değerlendirin. Ajan, `@Testcontainers`, `@ServiceConnection` veya `@DynamicPropertySource` kullanarak konteyner yaşam döngüsünü yönetebilir; bu anotasyonların kullanımını GEMINI.md’ye ekleyin. Test raporlarını `target/surefire-reports` veya `build/reports/tests` altında inceleyin. Ajanın testleri geçmek için üretim kodunu gevşetmesine izin vermeyin; örneğin gereksiz catch blokları veya geniş `throws Exception` eklemek şüphelidir. Son kararı `git diff` ile verin. Ayrıca ajanın test kodunda doğrulama yaparken yalnızca HTTP durumunu değil, dönüş gövdesini de kontrol etmesini isteyin; MockMvc ile `jsonPath` kullanımı Spring Boot testlerinde daha güçlüdür.

## Birden çok ajanı AgentVera ile yönetmek
Spring Boot projelerinde birden çok görev paralel ilerleyebilir. AgentVera, her ajanı kendi git worktree’sinde çalıştırır; böylece aynı modülde yapılan değişiklikler birbirinin dosyasını ezmez. Bir ajanın işi bitince otomatik kod incelemesi yapılır ve bulgular dosya:satır olarak gösterilir. Checkpoint’ler sayesinde hatalı bir adım tek tıkla geri alınabilir, token bütçeleri ise uzun test süreçlerinde maliyeti kontrol eder. Detaylar için [Windows’ta kodlama ajanlarını yönetmek: paralel ajanlar](/blog/windowsta-kodlama-ajanlari/) yazısına bakabilirsiniz.

## Sonuç
Gemini CLI, Spring Boot projelerinde katmanlar arası kod üretimi, test yazımı ve hata ayıklamada işe yarar. Başarı, GEMINI.md bağlamının net olmasına, görevlerin küçük tutulmasına ve testlerin sürekli çalıştırılmasına bağlıdır. Özellikle Testcontainers ve slice testleri doğru yapılandırdığınızda ajan, tekrarlı işleri güvenle üstlenir. Paralel çalışma gerektiğinde AgentVera ile ajanları ayrı worktree’lerde yönetmek güvenli bir yol sunar.

## Sık sorulanlar

**Gemini CLI Spring Boot projesinde nasıl başlatılır?** Proje klasöründe terminalden gemini komutunu çalıştırın. Önce kök dizine GEMINI.md ekleyin; ajan bu dosyadaki build, test ve katman kurallarını kullanır.

**Gemini CLI için GEMINI.md dosyasına hangi Spring Boot bilgileri yazılmalı?** Maven veya Gradle build/test komutları, paket yapısı, constructor injection zorunluluğu, DTO kullanımı ve Testcontainers test stratejisi yer almalıdır.

**Gemini CLI Spring Boot testlerini gerçekten çalıştırabilir mi?** Evet, ./mvnw test veya ./gradlew test komutlarını kullanarak JUnit 5 testlerini çalıştırır. Testcontainers gerektiren entegrasyon testlerinde Docker’ın açık olması gerekir.

**Gemini CLI Spring Boot projelerinde hangi görevlerde en iyidir?** Controller endpoint’leri, service transaction yönetimi, Spring Data JPA repository sorguları, DTO mapping ve test yazımı gibi tekrarlı katman işlerinde iyidir. Mimari kararlar ve performans optimizasyonu için insan incelemesi gerekir.

---

**AgentVera hakkında.** AgentVera, Solviera Teknoloji tarafından geliştirilen macOS, Windows ve Linux masaüstü uygulamasıdır. 18 yapay zeka kodlama ajanını (Claude Code, Codex, Gemini CLI, Copilot, Cursor, Antigravity, opencode, Hermes, Qwen Code, Kimi Code, Kiro, Amp, Droid, Goose, Vibe, Crush, Aider, Cline) proje bazında, gerçek terminallerde ve kullanıcının kendi CLI kurulum ve girişleriyle yan yana çalıştırır. Ücretsiz planda sınırsız ajan vardır. İndir: https://agentvera.dev/indir/ · Fiyatlar: https://agentvera.dev/fiyatlar/
