From 813c72a58cd6856a33f37b1d2df38ee5ea49c603 Mon Sep 17 00:00:00 2001 From: Xueqin Cui Date: Fri, 25 Sep 2026 11:27:01 +1000 Subject: [PATCH 1/2] util/maven: add POM dependency interpolation --- util/maven/project.go | 14 +++++++++ util/maven/project_test.go | 61 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/util/maven/project.go b/util/maven/project.go index 1f0dca0..82cdb90 100644 --- a/util/maven/project.go +++ b/util/maven/project.go @@ -329,3 +329,17 @@ func (p *Project) InterpolateRepositories() error { return nil } + +// InterpolateDependencies resolves placeholders in dependencies metadata with best effort. +func (p *Project) InterpolateDependencies() error { + properties, err := p.propertyMap() + if err != nil { + return err + } + + for i := range p.Dependencies { + p.Dependencies[i].interpolate(properties) + } + + return nil +} diff --git a/util/maven/project_test.go b/util/maven/project_test.go index 195bbc7..de41c08 100644 --- a/util/maven/project_test.go +++ b/util/maven/project_test.go @@ -895,3 +895,64 @@ func TestInterpolateRepositories(t *testing.T) { t.Errorf("interpolate repositories then interpolate:\n(-got, +want):\n%s", diff) } } + +func TestInterpolateDependencies(t *testing.T) { + proj := Project{ + ProjectKey: ProjectKey{ + GroupID: "com.example", + ArtifactID: "basic", + Version: "1.2.3", + }, + Properties: Properties{ + Properties: []Property{ + {Name: "dep.version", Value: "1.0.0"}, + }, + }, + Dependencies: []Dependency{{ + GroupID: "org.example", + ArtifactID: "valid-property-version", + Version: "${dep.version}", + }, { + GroupID: "org.example", + ArtifactID: "invalid-property-version", + Version: "${invalid.version}", + }, { + GroupID: "org.example", + ArtifactID: "hardcoded-version", + Version: "3.0.0", + }}, + } + + want := Project{ + ProjectKey: ProjectKey{ + GroupID: "com.example", + ArtifactID: "basic", + Version: "1.2.3", + }, + Properties: Properties{ + Properties: []Property{ + {Name: "dep.version", Value: "1.0.0"}, + }, + }, + Dependencies: []Dependency{{ + GroupID: "org.example", + ArtifactID: "valid-property-version", + Version: "1.0.0", + }, { + GroupID: "org.example", + ArtifactID: "invalid-property-version", + Version: "${invalid.version}", + }, { + GroupID: "org.example", + ArtifactID: "hardcoded-version", + Version: "3.0.0", + }}, + } + + if err := proj.InterpolateDependencies(); err != nil { + t.Fatalf("InterpolateDependencies() err = %v, want nil", err) + } + if diff := cmp.Diff(proj, want); diff != "" { + t.Errorf("interpolate dependencies:\n(-got, +want):\n%s", diff) + } +} From 513d2a17d41a6911070453c69e9ed46c3364193e Mon Sep 17 00:00:00 2001 From: Xueqin Cui Date: Fri, 25 Sep 2026 11:42:44 +1000 Subject: [PATCH 2/2] update comment --- util/maven/project.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/util/maven/project.go b/util/maven/project.go index 82cdb90..618faef 100644 --- a/util/maven/project.go +++ b/util/maven/project.go @@ -330,7 +330,8 @@ func (p *Project) InterpolateRepositories() error { return nil } -// InterpolateDependencies resolves placeholders in dependencies metadata with best effort. +// InterpolateDependencies resolves placeholders in dependency metadata with best effort. +// Unlike Interpolate, dependencies with unresolved placeholders are preserved rather than dropped. func (p *Project) InterpolateDependencies() error { properties, err := p.propertyMap() if err != nil {