Skip to content

Commit 9d9f80d

Browse files
authored
fix(java): correctly overwrite version from depManagement if dependency uses project.* props (#8050)
1 parent 7389961 commit 9d9f80d

File tree

4 files changed

+94
-2
lines changed

4 files changed

+94
-2
lines changed

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

+46
Original file line numberDiff line numberDiff line change
@@ -1470,6 +1470,52 @@ func TestPom_Parse(t *testing.T) {
14701470
},
14711471
},
14721472
},
1473+
{
1474+
name: "overwrite artifact version from dependencyManagement in the root POM when dependency uses `project.*` props",
1475+
inputFile: filepath.Join("testdata", "root-pom-dep-management-for-deps-with-project-props", "pom.xml"),
1476+
local: true,
1477+
want: []ftypes.Package{
1478+
{
1479+
ID: "com.example:root-pom-dep-management-for-deps-with-project-props:1.0.0",
1480+
Name: "com.example:root-pom-dep-management-for-deps-with-project-props",
1481+
Version: "1.0.0",
1482+
Relationship: ftypes.RelationshipRoot,
1483+
},
1484+
{
1485+
ID: "org.example:example-dependency:1.7.30",
1486+
Name: "org.example:example-dependency",
1487+
Version: "1.7.30",
1488+
Relationship: ftypes.RelationshipDirect,
1489+
Locations: ftypes.Locations{
1490+
{
1491+
StartLine: 21,
1492+
EndLine: 25,
1493+
},
1494+
},
1495+
},
1496+
{
1497+
ID: "org.example:example-api:2.0.0",
1498+
Name: "org.example:example-api",
1499+
Version: "2.0.0",
1500+
Licenses: []string{"The Apache Software License, Version 2.0"},
1501+
Relationship: ftypes.RelationshipIndirect,
1502+
},
1503+
},
1504+
wantDeps: []ftypes.Dependency{
1505+
{
1506+
ID: "com.example:root-pom-dep-management-for-deps-with-project-props:1.0.0",
1507+
DependsOn: []string{
1508+
"org.example:example-dependency:1.7.30",
1509+
},
1510+
},
1511+
{
1512+
ID: "org.example:example-dependency:1.7.30",
1513+
DependsOn: []string{
1514+
"org.example:example-api:2.0.0",
1515+
},
1516+
},
1517+
},
1518+
},
14731519
{
14741520
name: "transitive dependencyManagement should not be inherited",
14751521
inputFile: filepath.Join("testdata", "transitive-dependency-management", "pom.xml"),

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ func (d pomDependency) Resolve(props map[string]string, depManagement, rootDepMa
245245

246246
// If this dependency is managed in the root POM,
247247
// we need to overwrite fields according to the managed dependency.
248-
if managed, found := findDep(d.Name(), rootDepManagement); found { // dependencyManagement from the root POM
248+
if managed, found := findDep(dep.Name(), rootDepManagement); found { // dependencyManagement from the root POM
249249
if managed.Version != "" {
250250
dep.Version = evaluateVariable(managed.Version, props, nil)
251251
}
@@ -264,7 +264,7 @@ func (d pomDependency) Resolve(props map[string]string, depManagement, rootDepMa
264264
}
265265

266266
// Inherit version, scope and optional from dependencyManagement if empty
267-
if managed, found := findDep(d.Name(), depManagement); found { // dependencyManagement from parent
267+
if managed, found := findDep(dep.Name(), depManagement); found { // dependencyManagement from parent
268268
if dep.Version == "" {
269269
dep.Version = evaluateVariable(managed.Version, props, nil)
270270
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>org.example</groupId>
7+
<artifactId>example-dependency</artifactId>
8+
<version>1.7.30</version>
9+
10+
<dependencies>
11+
<dependency>
12+
<groupId>${project.groupId}</groupId>
13+
<artifactId>example-api</artifactId>
14+
<version>${project.version}</version>
15+
</dependency>
16+
</dependencies>
17+
18+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<groupId>com.example</groupId>
6+
<artifactId>root-pom-dep-management-for-deps-with-project-props</artifactId>
7+
<version>1.0.0</version>
8+
<packaging>pom</packaging>
9+
10+
<dependencyManagement>
11+
<dependencies>
12+
<dependency>
13+
<groupId>org.example</groupId>
14+
<artifactId>example-api</artifactId>
15+
<version>2.0.0</version>
16+
</dependency>
17+
</dependencies>
18+
</dependencyManagement>
19+
20+
<dependencies>
21+
<dependency>
22+
<groupId>org.example</groupId>
23+
<artifactId>example-dependency</artifactId>
24+
<version>1.7.30</version>
25+
</dependency>
26+
</dependencies>
27+
28+
</project>

0 commit comments

Comments
 (0)