in lib/generator.js [204:308]
async visitPom() {
var entities = new Entities();
var targetFile = this.pomOutputDir + '/pom.xml';
let pomName = '/pom.xml';
if (this.exec) {
pomName = '/pomWithMain.xml';
}
var pomFile;
var dependenciesClass = [];
var havePom = false;
if (fs.existsSync(targetFile)) {
havePom = true;
pomFile = fs.readFileSync(targetFile);
} else {
pomFile = fs.readFileSync(path.join(__dirname, pomName));
}
Object.keys(this.typedef).forEach((type) => {
if (!dependenciesClass.includes(this.typedef[type].package)) {
dependenciesClass.push(this.typedef[type].package);
}
});
Object.keys(this.imports).forEach((key) => {
dependenciesClass.push(this.imports[key].release);
let moduleTypedef = this.imports[key].typedef || {};
Object.keys(moduleTypedef).forEach((type) => {
if (!dependenciesClass.includes(moduleTypedef[type].package)) {
dependenciesClass.push(moduleTypedef[type].package);
}
});
});
const json = await parse(pomFile);
var needAddDependencies = [];
if (!havePom) {
json.project.dependencies = { dependency: [] };
dependenciesClass.push('com.aliyun:tea:1.1.14');
dependenciesClass.forEach((value) => {
if (value) {
let dependency = value.split(':');
var dependencyObject = {};
dependencyObject.groupId = dependency[0];
dependencyObject.artifactId = dependency[1];
dependencyObject.version = dependency[2];
json.project.dependencies.dependency.push(dependencyObject);
}
});
} else {
dependenciesClass.forEach((value) => {
if (value) {
let needAdd = true;
let dependency = value.split(':');
var dependencyObject = {};
dependencyObject.groupId = dependency[0];
dependencyObject.artifactId = dependency[1];
dependencyObject.version = dependency[2];
json.project.dependencies[0].dependency.forEach((dependency) => {
if (dependency.artifactId[0] === dependencyObject.artifactId) {
if (shouldChange(dependency.version[0], dependencyObject.version)) {
dependency.version[0] = dependencyObject.version;
}
needAdd = false;
}
});
if (needAdd) {
needAddDependencies.push(dependencyObject);
}
}
});
needAddDependencies.forEach((value) => {
json.project.dependencies[0].dependency.push(value);
});
}
const builder = new xml2js.Builder();
pomFile = builder.buildObject(json);
const newJson = await parse(pomFile);
needAddDependencies = [];
Object.keys(this.packageManager || {}).forEach((value) => {
let needAdd = true;
let dependency = value.split(':');
var dependencyObject = {};
dependencyObject.groupId = dependency[0];
dependencyObject.artifactId = dependency[1];
dependencyObject.version = this.packageManager[`${dependency[0]}:${dependency[1]}`];
newJson.project.dependencies[0].dependency.forEach((dependency) => {
if (dependency.groupId[0] === dependencyObject.groupId
&& dependency.artifactId[0] === dependencyObject.artifactId) {
dependency.version[0] = dependencyObject.version;
needAdd = false;
}
});
if (needAdd) {
needAddDependencies.push(dependencyObject);
}
});
needAddDependencies.forEach((value) => {
newJson.project.dependencies[0].dependency.push(value);
});
let newPom = builder.buildObject(newJson);
if (this.exec) {
let mainClassPath = this.package + '.' + (this.className || 'Client');
newPom = newPom.split('${mainClass}').join(mainClassPath);
}
newPom = render(newPom, this.packageInfo);
fs.writeFileSync(targetFile, entities.decode(newPom));
}