Skip to content

Commit 2933b01

Browse files
authored
fix(java): correctly inherit properties from parent fields for pom.xml files (#9111)
1 parent 47d3103 commit 2933b01

5 files changed

Lines changed: 67 additions & 52 deletions

File tree

pkg/dependency/parser/java/pom/parse_test.go

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -496,47 +496,64 @@ func TestPom_Parse(t *testing.T) {
496496
},
497497
},
498498
},
499+
// [INFO] com.example:child:jar:1.2.3
500+
// [INFO] +- org.example:example-dependency:jar:1.2.3:compile
501+
// [INFO] | \- org.example:example-api:jar:4.0.0:compile
502+
// [INFO] \- org.example:example-api3:jar:4.0.3:compile
499503
{
500504
name: "dependencyManagement prefers child properties",
501-
inputFile: filepath.Join("testdata", "parent-child-properties", "child", "pom.xml"),
505+
inputFile: filepath.Join("testdata", "parent-child-properties", "pom.xml"),
502506
local: true,
503507
want: []ftypes.Package{
504508
{
505-
ID: "com.example:child:1.0.0::b6c336a6",
509+
ID: "com.example:child:1.2.3::14cce9f5",
506510
Name: "com.example:child",
507-
Version: "1.0.0",
511+
Version: "1.2.3",
508512
Relationship: ftypes.RelationshipRoot,
509513
},
510514
{
511-
ID: "org.example:example-dependency:1.2.3::60fa7625",
515+
ID: "org.example:example-api3:4.0.3::c4062c26",
516+
Name: "org.example:example-api3",
517+
Version: "4.0.3",
518+
Relationship: ftypes.RelationshipDirect,
519+
Locations: ftypes.Locations{
520+
{
521+
StartLine: 30,
522+
EndLine: 34,
523+
},
524+
},
525+
},
526+
{
527+
ID: "org.example:example-dependency:1.2.3::d1f3e5ff",
512528
Name: "org.example:example-dependency",
513529
Version: "1.2.3",
514530
Relationship: ftypes.RelationshipDirect,
515531
Locations: ftypes.Locations{
516532
{
517-
StartLine: 22,
518-
EndLine: 26,
533+
StartLine: 25,
534+
EndLine: 29,
519535
},
520536
},
521537
},
522538
{
523-
ID: "org.example:example-api:4.0.0::221fee5d",
539+
ID: "org.example:example-api:4.0.0::daf5884b",
524540
Name: "org.example:example-api",
525541
Version: "4.0.0",
526542
Relationship: ftypes.RelationshipIndirect,
527543
},
528544
},
529545
wantDeps: []ftypes.Dependency{
530546
{
531-
ID: "com.example:child:1.0.0::b6c336a6",
547+
ID: "com.example:child:1.2.3::14cce9f5",
532548
DependsOn: []string{
533-
"org.example:example-dependency:1.2.3::60fa7625",
549+
"org.example:example-api3:4.0.3::c4062c26",
550+
"org.example:example-dependency:1.2.3::d1f3e5ff",
534551
},
535552
},
536553
{
537-
ID: "org.example:example-dependency:1.2.3::60fa7625",
554+
ID: "org.example:example-dependency:1.2.3::d1f3e5ff",
538555
DependsOn: []string{
539-
"org.example:example-api:4.0.0::221fee5d",
556+
"org.example:example-api:4.0.0::daf5884b",
540557
},
541558
},
542559
},

pkg/dependency/parser/java/pom/pom.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,16 @@ func (p *pom) listProperties(val reflect.Value) map[string]string {
9797
m := val.Field(i)
9898
for _, e := range m.MapKeys() {
9999
v := m.MapIndex(e)
100+
101+
// <properties> element may contain:
102+
// - properties from <properties> element of current POM
103+
// - properties from parent POMs (we added these properties early)
104+
// - properties from <properties> element of parent POMs
105+
// - properties got from fields of parent POMs (`project.groupId`, `parent.project.version`, etc.)
106+
// Properties from field has higher priority than properties from <properties> element.
107+
if tag == "properties" && props[e.String()] != "" {
108+
continue
109+
}
100110
props[e.String()] = v.String()
101111
}
102112
case reflect.Struct:

pkg/dependency/parser/java/pom/testdata/parent-child-properties/parent/pom.xml

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,29 @@
22
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
33
<modelVersion>4.0.0</modelVersion>
44

5-
<parent>
6-
<groupId>com.example</groupId>
7-
<artifactId>top-parent</artifactId>
8-
<version>1.0.0</version>
9-
<relativePath>../top-parent</relativePath>
10-
</parent>
11-
12-
135
<groupId>com.example</groupId>
146
<artifactId>parent</artifactId>
15-
<version>1.0.0</version>
7+
<version>4.0.3</version>
168

179
<packaging>pom</packaging>
1810
<name>parent</name>
1911
<description>Parent</description>
2012

13+
<properties>
14+
<bom.version>3.0.0</bom.version>
15+
<dep.version>1.2.3</dep.version>
16+
</properties>
17+
18+
<dependencyManagement>
19+
<dependencies>
20+
<dependency>
21+
<groupId>org.example</groupId>
22+
<artifactId>example-bom</artifactId>
23+
<version>${bom.version}</version>
24+
<type>pom</type>
25+
<scope>import</scope>
26+
</dependency>
27+
</dependencies>
28+
</dependencyManagement>
29+
2130
</project>

pkg/dependency/parser/java/pom/testdata/parent-child-properties/child/pom.xml renamed to pkg/dependency/parser/java/pom/testdata/parent-child-properties/pom.xml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,32 @@
55
<artifactId>child</artifactId>
66

77
<name>child</name>
8+
<version>1.2.3</version>
89
<description>Child</description>
910

1011
<parent>
1112
<groupId>com.example</groupId>
1213
<artifactId>parent</artifactId>
13-
<version>1.0.0</version>
14-
<relativePath>../parent</relativePath>
14+
<version>4.0.3</version>
15+
<relativePath>./parent</relativePath>
1516
</parent>
1617

1718
<properties>
1819
<bom.version>4.0.0</bom.version>
20+
<project.parent.version>1.1.1</project.parent.version>
21+
<project.version>2.3.4</project.version>
1922
</properties>
2023

2124
<dependencies>
2225
<dependency>
2326
<groupId>org.example</groupId>
2427
<artifactId>example-dependency</artifactId>
25-
<version>1.2.3</version>
28+
<version>${project.version}</version>
29+
</dependency>
30+
<dependency>
31+
<groupId>org.example</groupId>
32+
<artifactId>example-api3</artifactId>
33+
<version>${project.parent.version}</version>
2634
</dependency>
2735
</dependencies>
2836
</project>

pkg/dependency/parser/java/pom/testdata/parent-child-properties/top-parent/pom.xml

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)