diff --git a/util/maven/project.go b/util/maven/project.go index 1f0dca0..618faef 100644 --- a/util/maven/project.go +++ b/util/maven/project.go @@ -329,3 +329,18 @@ func (p *Project) InterpolateRepositories() error { return nil } + +// 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 { + 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) + } +}