@@ -551,9 +551,9 @@ cf set-env myapp JBP_CONFIG_TOMCAT '{tomcat: {version: 10.1.+}}'
551551cf set-env myapp JBP_CONFIG_TOMCAT ' {external_configuration_enabled: true, external_configuration: {version: "1.0.0"}}'
552552```
553553
554- #### External Configuration: Different Approaches
554+ #### External Configuration:
555555
556- ** Ruby Buildpack ** : Runtime repository_root override ✅
556+ Both buildpacks support repository_root override ✅
557557
558558``` bash
559559# ✅ Works: Specify custom repository at runtime
@@ -566,37 +566,6 @@ cf set-env myapp JBP_CONFIG_TOMCAT '{
566566}'
567567```
568568
569- ** Implementation** :
570- ``` ruby
571- # Ruby buildpack fetches index.yml from repository_root at staging time
572- def compile
573- download(@version , @uri ) { |file | expand file } # Downloads from repository_root
574- end
575- ```
576-
577- ** Go Buildpack** : Manifest-only configuration ⚠️
578-
579- ``` bash
580- # ❌ DOES NOT WORK: repository_root via environment variable not supported
581- cf set-env myapp JBP_CONFIG_TOMCAT ' {external_configuration_enabled: true, ...}'
582- ```
583-
584- ** Required approach** :
585- 1 . Fork buildpack
586- 2 . Add external configuration to ` manifest.yml ` :
587- ``` yaml
588- dependencies :
589- - name : tomcat-external-configuration
590- version : 1.0.0
591- uri : https://my-repo.example.com/tomcat-config-1.0.0.tar.gz
592- sha256 : abc123...
593- cf_stacks :
594- - cflinuxfs4
595- ` ` `
596- 3. Package and upload custom buildpack
597-
598- **Why the difference**: Go buildpack prioritizes security (mandatory SHA256 verification) and reproducibility (same manifest = same configs) over runtime flexibility.
599-
600569### 2A.5 Access Logging Configuration
601570
602571#### Default Behavior: Disabled (Parity)
@@ -1241,13 +1210,13 @@ func (s *SpringBootCLIContainer) Detect() (string, error) {
12411210
12421211### 3.1 Cloud Foundry API Versions
12431212
1244- | Aspect | Ruby (V2 API) | Go (V3 API) |
1245- | --------| ---------------| -------------|
1246- | ** Phases** | detect → compile → release | detect → supply → finalize |
1247- | ** Multi-buildpack** | Not supported (needs workarounds) | Native support (multiple supply phases) |
1213+ | Aspect | Ruby (V2 API) | Go (V3 API) |
1214+ | --------| ---------------| -------------------------------------------- |
1215+ | ** Phases** | detect → compile → release | detect → supply → finalize -> release |
1216+ | ** Multi-buildpack** | Not supported (needs workarounds) | Native support (multiple supply phases) |
12481217| ** Entrypoints** | ` bin/detect ` , ` bin/compile ` , ` bin/release ` | ` bin/detect ` , ` bin/supply ` , ` bin/finalize ` |
1249- | ** State Management** | Droplet object (in-memory) | Files in ` /deps/<idx>/ ` (persistent) |
1250- | ** Caching** | ` $CF_BUILDPACK_BUILDPACK_CACHE ` | Same + ` /deps/<idx>/ ` for dependencies |
1218+ | ** State Management** | Droplet object (in-memory) | Files in ` /deps/<idx>/ ` (persistent) |
1219+ | ** Caching** | ` $CF_BUILDPACK_BUILDPACK_CACHE ` | Same + ` /deps/<idx>/ ` for dependencies |
12511220
12521221### 3.2 Phase Responsibilities
12531222
@@ -1723,8 +1692,6 @@ func (t *Tomcat) Supply() error {
17231692
17241693** Key difference** : The Go buildpack ** initially forgot to use strip_components** , requiring helper functions like ` findTomcatHome() ` . The correct approach is to use ` crush.Extract() ` with ` strip=1 ` parameter (similar to Ruby's ` --strip 1 ` ).
17251694
1726- See detailed analysis: ` /ruby_vs_go_buildpack_comparison.md ` (the OLD document focuses on this specific issue).
1727-
17281695### 5.3 Caching Strategies
17291696
17301697| Aspect | Ruby Buildpack | Go Buildpack |
@@ -1741,13 +1708,13 @@ See detailed analysis: `/ruby_vs_go_buildpack_comparison.md` (the OLD document f
17411708
17421709### 6.1 Test Framework Comparison
17431710
1744- | Aspect | Ruby Buildpack | Go Buildpack |
1745- | --------| ---------------| --------------|
1746- | ** Unit Test Framework** | RSpec | Go testing + Gomega assertions |
1747- | ** Integration Tests** | Separate repo (java-buildpack-system-test) | In-tree (src/integration/) |
1748- | ** Test Runner** | Rake tasks | Switchblade framework |
1749- | ** Platforms** | Cloud Foundry only | CF + Docker (with GitHub token) |
1750- | ** Total Tests** | ~ 300+ specs | ~ 100 + integration tests |
1711+ | Aspect | Ruby Buildpack | Go Buildpack |
1712+ | --------| ---------------| --------------------------------------- |
1713+ | ** Unit Test Framework** | RSpec | Go testing + Gomega assertions |
1714+ | ** Integration Tests** | Separate repo (java-buildpack-system-test) | In-tree (src/integration/) |
1715+ | ** Test Runner** | Rake tasks | Switchblade framework |
1716+ | ** Platforms** | Cloud Foundry only | CF + Docker (with GitHub token) |
1717+ | ** Total Tests** | ~ 300+ specs | ~ 800 + integration tests |
17511718| ** Test Apps** | External repo (java-test-applications) | Embedded in src/integration/testdata/ |
17521719
17531720### 6.2 Test Organization
@@ -2313,8 +2280,6 @@ The Go-based Java buildpack is a **production-ready, feature-complete** migratio
23132280# # Appendix B: Further Reading
23142281
23152282- **ARCHITECTURE.md** - Detailed Go buildpack architecture
2316- - **comparison.md** - Component-by-component feature parity analysis
2317- - **ruby_vs_go_buildpack_comparison.md** - OLD document (focused on dependency extraction only, outdated)
23182283- **docs/custom-jre-usage.md** - Guide for custom JRE repositories in Go buildpack
23192284- **docs/DEVELOPING.md** - Development workflow and testing
23202285- **docs/IMPLEMENTING_FRAMEWORKS.md** - Framework implementation guide
@@ -2323,5 +2288,5 @@ The Go-based Java buildpack is a **production-ready, feature-complete** migratio
23232288---
23242289
23252290**Document Version**: 1.0
2326- **Last Updated**: January 5 , 2026
2291+ **Last Updated**: May 20 , 2026
23272292**Authors**: Cloud Foundry Java Buildpack Team
0 commit comments