Skip to content

Commit 2fe84c1

Browse files
Merge pull request #321 from luotianqi777/fix-mvn
fix: mvn direct dependecy scope
2 parents 6b91643 + 2361381 commit 2fe84c1

File tree

3 files changed

+78
-6
lines changed

3 files changed

+78
-6
lines changed

opensca/sca/java/mvn.go

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,22 @@ func inheritPom(pom *Pom, getpom getPomFunc) {
284284
}
285285
}
286286

287+
func replacePomDependency(old, new *PomDependency, indirect bool) (replaced *PomDependency) {
288+
originVersion := old.Version
289+
originScope := old.Scope
290+
dep := *new
291+
replaced = &dep
292+
// 间接依赖优先使用新的version
293+
if indirect && replaced.Version == "" {
294+
replaced.Version = originVersion
295+
}
296+
// 直接依赖优先保留原始scope
297+
if !indirect && originScope != "" {
298+
replaced.Scope = originScope
299+
}
300+
return
301+
}
302+
287303
// parsePom 解析单个pom 返回该pom的依赖图
288304
func parsePom(ctx context.Context, pom *Pom, getpom getPomFunc) *model.DepGraph {
289305

@@ -364,7 +380,7 @@ func parsePom(ctx context.Context, pom *Pom, getpom getPomFunc) *model.DepGraph
364380
if d, ok := depManagement[dep.Index2()]; ok {
365381
exclusion := append(dep.Exclusions, d.Exclusions...)
366382
if dep.Version == "" {
367-
dep = d
383+
dep = replacePomDependency(dep, d, false)
368384
}
369385
dep.Exclusions = exclusion
370386
np.Update(dep)
@@ -375,11 +391,7 @@ func parsePom(ctx context.Context, pom *Pom, getpom getPomFunc) *model.DepGraph
375391
d, ok := rootPomManagement[dep.Index2()]
376392
if ok {
377393
exclusion := append(dep.Exclusions, d.Exclusions...)
378-
originVersion := dep.Version
379-
dep = d
380-
if dep.Version == "" {
381-
dep.Version = originVersion
382-
}
394+
dep = replacePomDependency(dep, d, true)
383395
dep.Exclusions = exclusion
384396
pom.Update(dep)
385397
}

test/java/18/pom.xml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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>foo</groupId>
7+
<artifactId>demo</artifactId>
8+
<packaging>pom</packaging>
9+
<version>1.0</version>
10+
11+
<dependencyManagement>
12+
<dependencies>
13+
<dependency>
14+
<groupId>org.apache.logging.log4j</groupId>
15+
<artifactId>log4j-core</artifactId>
16+
<scope>compile</scope>
17+
<version>1.0</version>
18+
</dependency>
19+
<dependency>
20+
<groupId>org.apache.logging.log4j</groupId>
21+
<artifactId>log4j-core2</artifactId>
22+
<scope>test</scope>
23+
<version>2.0</version>
24+
</dependency>
25+
<dependency>
26+
<groupId>org.apache.logging.log4j</groupId>
27+
<artifactId>log4j-core3</artifactId>
28+
<scope>test</scope>
29+
<version>3.0</version>
30+
</dependency>
31+
</dependencies>
32+
</dependencyManagement>
33+
34+
<dependencies>
35+
<dependency>
36+
<groupId>org.apache.logging.log4j</groupId>
37+
<artifactId>log4j-core</artifactId>
38+
<scope>test</scope>
39+
</dependency>
40+
<dependency>
41+
<groupId>org.apache.logging.log4j</groupId>
42+
<artifactId>log4j-core2</artifactId>
43+
</dependency>
44+
<dependency>
45+
<groupId>org.apache.logging.log4j</groupId>
46+
<artifactId>log4j-core3</artifactId>
47+
<scope>compile</scope>
48+
</dependency>
49+
</dependencies>
50+
51+
</project>

test/java/java_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,15 @@ var cases = []tool.TaskCase{
194194
tool.Dep3("org.apache.logging.log4j", "log4j-core", "2.17.2"),
195195
),
196196
)},
197+
198+
// 直接依赖优先级高于dependencyManagement
199+
{Path: "18", Result: tool.Dep("", "",
200+
tool.Dep3("foo", "demo", "1.0",
201+
tool.DevDep3("org.apache.logging.log4j", "log4j-core", "1.0"),
202+
tool.DevDep3("org.apache.logging.log4j", "log4j-core2", "2.0"),
203+
tool.Dep3("org.apache.logging.log4j", "log4j-core3", "3.0"),
204+
),
205+
)},
197206
}
198207

199208
func Test_JavaWithStatic(t *testing.T) {

0 commit comments

Comments
 (0)