async visitPom()

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));
  }