@@ -87,39 +87,51 @@ jobs:
87
87
// Maven 依赖解析
88
88
// 1. 读取并解析整个pom.xml
89
89
const pomContent = fs.readFileSync('pom.xml', 'utf-8');
90
- let pom = {};
91
- let properties = {};
92
- let allDependencies = [];
93
90
94
91
// 使用xml2js解析pom.xml
95
- const parser = new xml2js.Parser();
92
+ const parser = new xml2js.Parser({ explicitArray: false } );
96
93
const result = await parser.parseStringPromise(pomContent);
97
94
98
95
// 提取properties
99
- if (result.project.properties && result.project.properties[0]) {
100
- for (const [key, value] of Object.entries(result.project.properties[0])) {
101
- if (Array.isArray(value)) {
102
- properties[key] = value[0];
103
- }
96
+ const properties = result.project?.properties || {};
97
+
98
+ // 递归提取依赖的函数
99
+ const allDependencies = [];
100
+ const extractDeps = (deps, scope) => {
101
+ if (!deps?.dependency) return;
102
+ const depList = Array.isArray(deps.dependency) ? deps.dependency : [deps.dependency];
103
+
104
+ depList.forEach(dep => {
105
+ if (!dep.groupId || !dep.artifactId) return;
106
+ // 处理版本号(可能是直接值或属性引用)
107
+ let version = dep.version || '';
108
+ let fromProperty = '';
109
+
110
+ if (version.startsWith('${') && version.endsWith('}')) {
111
+ const propName = version.slice(2, -1);
112
+ version = properties[propName] || version;
113
+ fromProperty = propName;
104
114
}
105
- }
106
115
107
- // 提取所有依赖
108
- if (result.project.dependencies && result.project.dependencies[0]) {
109
- allDependencies = result.project.dependencies[0].dependency.map(dep => ({
110
- groupId: dep.groupId[0],
111
- artifactId: dep.artifactId[0],
112
- version: dep.version ? dep.version[0] : null
113
- }));
116
+ allDependencies.push({
117
+ group: dep.groupId,
118
+ artifact: dep.artifactId,
119
+ version: version,
120
+ scope: scope || dep.scope || 'compile',
121
+ fromProperty: fromProperty || undefined,
122
+ isManaged: scope === 'management'
123
+ });
124
+ });
125
+ };
126
+
127
+ // 1. 提取dependencyManagement中的依赖
128
+ if (result.project?.dependencyManagement?.dependencies) {
129
+ extractDeps(result.project.dependencyManagement.dependencies, 'management');
114
130
}
115
- if (result.project.dependencyManagement && result.project.dependencyManagement[0] && result.project.dependencyManagement[0].dependencies[0]) {
116
- result.project.dependencyManagement[0].dependencies[0].dependency.foreach(dep => ({
117
- allDependencies.push({
118
- groupId: dep.groupId[0],
119
- artifactId: dep.artifactId[0],
120
- version: dep.version ? dep.version[0] : null
121
- });
122
- }));
131
+
132
+ // 2. 提取普通dependencies
133
+ if (result.project?.dependencies) {
134
+ extractDeps(result.project.dependencies);
123
135
}
124
136
console.log("=====allDependencies=====");
125
137
console.log(allDependencies);
0 commit comments