glaforge/gemini-interactions-api-sdk deposunu korumalı alan ortamına başarıyla kopyaladım ve kod tabanını, proje düzenini ve yapılandırma dosyalarını inceledim.
Aşağıda, projenin derleme, test, paketleme ve CI/CD yayın yaşam döngülerini nasıl desteklediği de dahil olmak üzere pom.xml dosya yapısının bir mimar tarafından yapılan analizi ve dökümü yer almaktadır.
Proje, Google Gemini Interactions API ile arayüz oluşturmak için tasarlanmış modern bir Java kitaplığı olarak yapılandırılmıştır. Java 21 (LTS)'i hedefleyen bu codelab'de, temel derlemeden imzalamaya, Maven Central'da otomatik yayınlamaya ve Google Cloud Run'da sunucusuz dağıtım için deneysel bir ön ucu paketlemeye kadar her şeyi yöneten oldukça gelişmiş, profile dayalı bir Maven yapılandırması gösterilmektedir.
1. Proje Koordinatları ve Meta Veriler
Dosyanın en üstünde temel Maven proje meta verileri ve koordinatları tanımlanır:
<groupId>io.github.glaforge</groupId>
<artifactId>gemini-interactions-api-sdk</artifactId>
<version>0.10.2-SNAPSHOT</version>
<name>Gemini Interactions API SDK</name>
<description>Google Gemini Interactions API SDK</description>
- Hedef JDK: Özellikler, Java 21'in kaynak ve hedef uyumluluğunu belirterek modern Java özelliklerini (kayıtlar, kalıp eşleştirme, sanal iş parçacıkları vb.) etkinleştirir:
xml <properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> - Atıflar: Apache Lisansı 2.0'ı belirtir ve projeyi geliştirici Guillaume Laforge'a (
glaforge) atfeder.
2. Bağımlılıklar ve Bağımlılık Yönetimi
Bağımlılık seçimleri, popüler kitaplıkların yeni nesil sürümlerini tercih ederek çok ileriye dönük bir yığını yansıtır:
C. Temel Bağımlılık ve Jackson 3.x'e Taşıma
SDK, JSON işleme için Jackson 3.0.0'ı kullanır.
```xml
* **Architectural Note:** Jackson is undergoing a major package rename for version 3.x, changing its Maven group ID fromcom.fasterxml.jacksontotools.jackson. This POM imports thejackson-bom(Bill of Materials) version3.0.0and utilizes the newtools.jackson.core:jackson-databind` koordinatını kullanarak SDK'yı son derece hafif ve güncel tutar.
B. Test ve yardımcı program bağımlılıkları
<scope>test</scope> altında, proje doğrulama ve sahte sunucular için araçlar getirir:
1. JUnit 6:
xml
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>6.0.2</version>
<scope>test</scope>
</dependency>
Birim ve entegrasyon testi için en yeni JUnit 6.0.2'yi kullanır.
2. MockWebServer:
xml
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
<version>4.12.0</version>
<scope>test</scope>
</dependency>
Yerel entegrasyon testi sırasında Gemini API'den gelen HTTP yanıtlarını taklit etmek için kullanılır.
3. Javelit:
xml
<dependency>
<groupId>io.javelit</groupId>
<artifactId>javelit</artifactId>
<version>0.86.0</version>
<scope>test</scope>
</dependency>
SDK ile etkileşim için web tabanlı bir kullanıcı arayüzü ("Araştırma Ön Uç") oluşturmak üzere özellikle test klasöründe kullanılan zarif ve hafif bir çerçeve.
3. Profiller: Profile-Driven Lifecycle Architecture
Bu pom.xml'nın temel gücü, dört Maven profilinde yatar. Her profil, belirli bir mimari aşamaya hizmet eder:
Profil 1: deployment
Tam API belgeleri ve kaynaklarıyla standart SDK sürümlerini paketlemek için tasarlanmıştır.
* Aşamalandırma alanı: <altDeploymentRepository> kullanılarak target/staging-deploy konumunda yerel bir aşamalandırma dizini yapılandırır.
* Eklentiler:
* maven-javadoc-plugin (v3.5.0): Javadocs'u paketler.
* maven-source-plugin (v3.3.0): Ham Java kaynak dosyalarını paketler.
Profil 2: publication
Bu profil, kitaplığı herkese açık kayıt defterlerine yayınlamaya ayrılmıştır ve geleneksel ağır Maven yayın mekanizmaları yerine JReleaser (v1.22.0) kullanır.
* GitHub Release: Gerekirse mevcut sürümleri geçersiz kılarak Conventional Commits'e dayalı güzel ve otomatik değişiklik günlükleri oluşturur.
* PGP İmzalama: Tüm yayın yapılarını PGP (<armored>true</armored>) aracılığıyla otomatik olarak imzalayacak şekilde yapılandırılır.
* Maven Central Deployment: İmzalı yapıları doğrudan target/staging-deploy dizininden Sonatype Central'a (https://central.sonatype.com/api/v1/publisher) dağıtır.
Profil 3: release
Yayın akışının düzenleyicisi olarak görev yapar ve Git görevlerini otomatikleştirmek için maven-release-plugin (v3.3.1) yapılandırır:
* Otomasyon Adımları:
* clean verify doğrulaması çalıştırır.
* chore: Releasing version... commit mesajı kuralını kullanarak sürümleri artırır, değişiklikleri commit eder ve depoyu (v@{project.version}) etiketler.
* -DskipTests ile deploy jreleaser:full-release çalıştırarak yayını tetikler. Bu işlem hem deployment hem de publication profillerini etkinleştirir.
Profil 4: deploy-frontend
Benzersiz bir zorluğun üstesinden gelen ustaca bir profil: Web tabanlı deneysel bir test sınıfını (ResearchFrontend.java, src/test/java içinde bulunur) paketleyip sunucusuz bir kapsayıcı olarak üretime dağıtma.
* Assembly Plugin: Ana sınıfları, test sınıflarını ve test kapsamlı tüm bağımlılıkları (Javelit ve OkHttp dahil) tek bir çalıştırılabilir Uber-JAR'da birleştirmek için özel tanımlayıcı src/assembly/frontend-deployment.xml ile maven-assembly-plugin (v3.6.0) kullanır.
* Hedef Sınıf: Main-Class manifest girişinin io.github.glaforge.gemini.interactions.ResearchFrontend'ı işaret etmesini sağlar.
* Dağıtım bağlamı: Bu oluşturulan JAR, researcher-deployment.md belgesinde açıklandığı gibi Dockerfile'lara gerek kalmadan Java 25 temel görüntüleri (us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/java25) kullanılarak doğrudan Google Cloud Run'a kopyalanır ve dağıtılır.
4. GitHub Actions ile entegrasyon (CI/CD)
Profil mimarisi, .github/workflows/ konumundaki GitHub iş akışlarını yansıtır:
build.yml(CI): Derleme, test ve bağımlılıkların sorunsuz bir şekilde çözülmesini sağlamak içinmaindalına yapılan pull istekleri veya commit'ler üzerinde./mvnw verifyyürütülür.release.yml(CD): Manuel olarak tetiklenen (workflow_dispatch) bu iş akışı şunları çalıştırır:bash ./mvnw -ntp -B -Prelease release:prepare release:performBu komut, sürümleri sistematik olarak güncelleyen, Git etiketlerini gönderen, javadoc'ları ve kaynakları oluşturan, yapıları imzalayan, projeyi derleyen, yayınları Sonatype'a gönderen ve GitHub yayın notlarını taslak olarak oluşturanreleaseprofiline dayanır.
Özet
gemini-interactions-api-sdk içindeki pom.xml, bildirime dayalı DevOps'a mükemmel bir örnektir. Temel kitaplığı son derece ince tutar (yalnızca Jackson 3.x'i kullanır) ancak karmaşık paketleme, imzalama, doküman oluşturma ve bulut tabanlı ön uç dağıtım özelliklerini temiz bir şekilde yeniden kullanılabilir profillerde kapsar.