UNPKG

@sap/cds-dk

Version:

Command line client and development toolkit for the SAP Cloud Application Programming Model

60 lines (53 loc) 2.27 kB
const os = require('os') const cds = require('../../../cds') const { exists, copy, rimraf, fs:{promises:{ mkdtemp }}, path } = cds.utils, { join } = path const cmd = require('../../../util/command') const mvn = require('../../mvn') const { merge } = require('../../merge') const { bold, info } = require('../../../util/term') const { URLS, OPTIONS: { NODEJS, JAVA } } = require('../../constants') const { options } = cds.cli module.exports = class JavaTemplate extends require('../../plugin') { static help() { return 'creates a Java-based project' } static hasInProduction() { return exists('pom.xml') } async canRun() { if (options.add?.has(NODEJS)) { throw `only one runtime per project is supported – specify either ${bold(JAVA)} or ${bold(NODEJS)}` } return true } async run() { const projectName = path.basename(cds.root) const { params, artifactId, archetypeVersion } = await mvn.init(projectName) console.log(`using Maven archetype version ${archetypeVersion}`) const temp = await mkdtemp(join(os.tmpdir(), `${path.basename(cds.root)}_`)) // preserve existing package.json (if any) let preservedPackageJsonPath if (exists('package.json')) { preservedPackageJsonPath = join(temp, 'package.json') await copy('package.json').to(preservedPackageJsonPath) } try { await cmd.spawnCommand('mvn', params, { cwd: temp }) await copy(join(temp, artifactId)).to(cds.root) if (preservedPackageJsonPath) { // merge template package.json into preserved one // (not the other way around) // to give preserved values precedence await merge('package.json').into(preservedPackageJsonPath) await copy(preservedPackageJsonPath).to('package.json') } } catch (err) { if (err.code === 'ENOENT' && err.path === 'mvn') { throw `Maven executable 'mvn' not found. Follow ${info(URLS.MAVEN_INSTALL_HELP)} and install Maven on your machine.` } throw err } finally { await rimraf(temp) } } }