in plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/ideMaven/MavenRunnerUtils.kt [63:154]
fun runMavenCopyCommands(
context: CodeModernizerSessionContext,
sourceFolder: File,
logBuilder: StringBuilder,
logger: Logger,
project: Project,
shouldSkipTests: Boolean,
): MavenCopyCommandsResult {
val currentTimestamp = System.currentTimeMillis()
val destinationDir = Files.createTempDirectory("transformation_dependencies_temp_$currentTimestamp")
val telemetry = CodeTransformTelemetryManager.getInstance(project)
var telemetryErrorMessage = ""
var telemetryLocalBuildResult = Result.Succeeded
logger.info { "Executing IntelliJ bundled Maven" }
try {
// Create shared parameters
val transformMvnRunner = TransformMavenRunner(project)
context.mavenRunnerQueue.add(transformMvnRunner)
val mvnSettings = MavenRunner.getInstance(project).settings.clone() // clone required to avoid editing user settings
val sourceVirtualFile = LocalFileSystem.getInstance().findFileByIoFile(sourceFolder)
val module = sourceVirtualFile?.let { ModuleUtilCore.findModuleForFile(it, project) }
val moduleSdk = module?.let { ModuleRootManager.getInstance(it).sdk }
val sdk = moduleSdk ?: ProjectRootManager.getInstance(project).projectSdk
// edge case: module SDK and project SDK are null, and Maven Runner Settings is using the null project SDK, so Maven Runner will definitely fail
if (sdk == null && mvnSettings.jreName == "#USE_PROJECT_JDK") return MavenCopyCommandsResult.NoJdk
// run copy dependencies
val copyDependenciesRunnable =
runMavenCopyDependencies(sourceFolder, logBuilder, mvnSettings, transformMvnRunner, destinationDir, logger)
copyDependenciesRunnable.await()
logBuilder.appendLine(copyDependenciesRunnable.getOutput())
if (copyDependenciesRunnable.isComplete()) {
val successMsg = "IntelliJ IDEA bundled Maven copy-dependencies executed successfully"
logger.info { successMsg }
logBuilder.appendLine(successMsg)
} else if (copyDependenciesRunnable.isTerminated()) {
telemetryLocalBuildResult = Result.Cancelled
return MavenCopyCommandsResult.Cancelled
} else {
telemetryErrorMessage += "Maven Copy: bundled Maven failed. "
}
// Run clean
val cleanRunnable = runMavenClean(sourceFolder, logBuilder, mvnSettings, transformMvnRunner, logger, destinationDir)
cleanRunnable.await()
logBuilder.appendLine(cleanRunnable.getOutput())
if (cleanRunnable.isComplete()) {
val successMsg = "IntelliJ bundled Maven clean executed successfully"
logger.info { successMsg }
logBuilder.appendLine(successMsg)
} else if (cleanRunnable.isTerminated()) {
telemetryLocalBuildResult = Result.Cancelled
return MavenCopyCommandsResult.Cancelled
} else {
telemetryErrorMessage += "Maven Clean: bundled Maven failed."
telemetryLocalBuildResult = Result.Failed
return MavenCopyCommandsResult.Failure
}
// Run install
val installRunnable = runMavenInstall(sourceFolder, logBuilder, mvnSettings, transformMvnRunner, logger, destinationDir, shouldSkipTests)
installRunnable.await()
logBuilder.appendLine(installRunnable.getOutput())
if (installRunnable.isComplete()) {
val successMsg = "IntelliJ bundled Maven install executed successfully"
logger.info { successMsg }
logBuilder.appendLine(successMsg)
} else if (installRunnable.isTerminated()) {
telemetryLocalBuildResult = Result.Cancelled
return MavenCopyCommandsResult.Cancelled
} else {
telemetryErrorMessage += "Maven Install: bundled Maven failed."
telemetryLocalBuildResult = Result.Failed
return MavenCopyCommandsResult.Failure
}
} catch (t: Throwable) {
val errorMessage = "IntelliJ bundled Maven executed failed: ${t.message}"
logger.error(t) { errorMessage }
telemetryErrorMessage = errorMessage
telemetryLocalBuildResult = Result.Failed
return MavenCopyCommandsResult.Failure
} finally {
// emit telemetry
telemetry.localBuildProject(CodeTransformBuildCommand.IDEBundledMaven, telemetryLocalBuildResult, telemetryErrorMessage)
}
// When all commands executed successfully, show the transformation hub
return MavenCopyCommandsResult.Success(destinationDir.toFile())
}