diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenShadePluginConfigurator.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenShadePluginConfigurator.kt index 365fdfd8bfac..bee3bb7e7109 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenShadePluginConfigurator.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenShadePluginConfigurator.kt @@ -20,10 +20,7 @@ import org.jetbrains.idea.maven.buildtool.MavenEventHandler import org.jetbrains.idea.maven.importing.workspaceModel.WorkspaceModuleImporter import org.jetbrains.idea.maven.model.MavenExplicitProfiles import org.jetbrains.idea.maven.model.MavenId -import org.jetbrains.idea.maven.project.MavenEmbeddersManager -import org.jetbrains.idea.maven.project.MavenProject -import org.jetbrains.idea.maven.project.MavenProjectBundle -import org.jetbrains.idea.maven.project.MavenProjectsManager +import org.jetbrains.idea.maven.project.* import org.jetbrains.idea.maven.server.MavenGoalExecutionRequest import org.jetbrains.idea.maven.utils.MavenLog import org.jetbrains.idea.maven.utils.MavenUtil @@ -40,7 +37,12 @@ import java.util.* import java.util.jar.JarEntry import java.util.jar.JarFile import java.util.jar.JarOutputStream +import kotlin.io.copyTo +import kotlin.io.extension import kotlin.io.path.pathString +import kotlin.io.relativeTo +import kotlin.io.walkTopDown +import kotlin.use internal class MavenShadePluginConfigurator : MavenWorkspaceConfigurator { private val externalSource = ExternalProjectSystemRegistry.getInstance().getSourceById(WorkspaceModuleImporter.EXTERNAL_SOURCE_ID) @@ -251,9 +253,7 @@ internal class MavenShadeFacetGeneratePostTaskConfigurator : MavenAfterImportCon val projectsTree = projectsManager.projectsTree val projectRoot = projectsTree.findRootProject(shadedMavenProjects.keys.first()) // assume there's only one root project val baseDir = MavenUtil.getBaseDir(projectRoot.directoryFile).toString() - val embeddersManager = projectsManager.embeddersManager val syncConsole = projectsManager.syncConsole - val embedder = embeddersManager.getEmbedder(MavenEmbeddersManager.FOR_POST_PROCESSING, baseDir) val userProperties = Properties() userProperties["skipTests"] = "true" @@ -270,7 +270,11 @@ internal class MavenShadeFacetGeneratePostTaskConfigurator : MavenAfterImportCon runBlockingMaybeCancellable { withBackgroundProgress(project, MavenProjectBundle.message("maven.generating.uber.jars", text), true) { reportRawProgress { reporter -> - embedder.executeGoal(listOf(request), "package", reporter, syncConsole) + val mavenEmbedderWrappers = MavenEmbedderWrappersImpl(project) + mavenEmbedderWrappers.use { + val embedder = mavenEmbedderWrappers.getEmbedder(baseDir) + embedder.executeGoal(listOf(request), "package", reporter, syncConsole) + } } } } @@ -319,23 +323,23 @@ internal class MavenShadeFacetRemapPostTaskConfigurator : MavenAfterImportConfig } val projectsManager = MavenProjectsManager.getInstance(project) val projectsTree = projectsManager.projectsTree - val embeddersManager = projectsManager.embeddersManager val projectRoots = shadedMavenProjectsAndDependencies.map { projectsTree.findRootProject(it) }.toSet() val baseDirsToMavenProjects = MavenUtil.groupByBasedir(projectRoots, projectsTree) for (baseDir in baseDirsToMavenProjects.keySet()) { - doCompile(project, embeddersManager, baseDirsToMavenProjects[baseDir], baseDir, projectsManager.syncConsole) + doCompile(project, baseDirsToMavenProjects[baseDir], baseDir, projectsManager.syncConsole) } } private fun doCompile(project: Project, - embeddersManager: MavenEmbeddersManager, mavenProjects: Collection, baseDir: String, mavenEventHandler: MavenEventHandler) { - val embedder = embeddersManager.getEmbedder(MavenEmbeddersManager.FOR_POST_PROCESSING, baseDir) - try { + val mavenEmbedderWrappers = MavenEmbedderWrappersImpl(project) + mavenEmbedderWrappers.use { + val embedder = mavenEmbedderWrappers.getEmbedder(baseDir) + val requests = mavenProjects.map { MavenGoalExecutionRequest(File(it.path), MavenExplicitProfiles.NONE) }.toList() val names = mavenProjects.map { it.displayName } val text = StringUtil.shortenPathWithEllipsis(StringUtil.join(names, ", "), 200) @@ -347,9 +351,6 @@ internal class MavenShadeFacetRemapPostTaskConfigurator : MavenAfterImportConfig } } } - finally { - embeddersManager.release(embedder) - } } private fun remapUberJar(mavenProject: MavenProject, shadingData: MavenProjectShadingData) { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenArchetypeManager.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenArchetypeManager.kt index 4c1184853533..2b5fd8f679c0 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenArchetypeManager.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenArchetypeManager.kt @@ -11,7 +11,7 @@ import org.jetbrains.idea.maven.indices.archetype.MavenCatalog import org.jetbrains.idea.maven.indices.archetype.MavenCatalog.System.DefaultLocal import org.jetbrains.idea.maven.model.MavenArchetype import org.jetbrains.idea.maven.model.MavenId -import org.jetbrains.idea.maven.project.MavenEmbeddersManager +import org.jetbrains.idea.maven.project.MavenEmbedderWrappersImpl import org.jetbrains.idea.maven.project.MavenProjectsManager import org.jetbrains.idea.maven.server.MavenEmbedderWrapper import org.jetbrains.idea.maven.utils.MavenLog @@ -21,7 +21,6 @@ import java.io.IOException import java.net.URL import java.nio.file.Files import java.nio.file.Path -import java.util.function.Function @Service(Service.Level.PROJECT) class MavenArchetypeManager(private val myProject: Project) { @@ -143,10 +142,9 @@ class MavenArchetypeManager(private val myProject: Project) { groupId: String, artifactId: String, version: String, url: String?, ): Map? { - val map: Map? = - executeWithMavenEmbedderWrapperNullable?> { - it.resolveAndGetArchetypeDescriptor(groupId, artifactId, version, mutableListOf(), url) - } + val map: Map? = executeWithMavenEmbedderWrapper { + it.resolveAndGetArchetypeDescriptor(groupId, artifactId, version, mutableListOf(), url) + } if (map != null) addToLocalIndex(groupId, artifactId, version) return map } @@ -163,30 +161,16 @@ class MavenArchetypeManager(private val myProject: Project) { private fun executeWithMavenEmbedderWrapper(function: (MavenEmbedderWrapper) -> R): R { val projectsManager = MavenProjectsManager.getInstance(myProject) - val manager = projectsManager.embeddersManager var baseDir = "" val projects = projectsManager.rootProjects if (!projects.isEmpty()) { baseDir = getBaseDir(projects[0]!!.directoryFile).toString() } - val mavenEmbedderWrapper = manager.getEmbedder(MavenEmbeddersManager.Companion.FOR_POST_PROCESSING, baseDir) - try { + val mavenEmbedderWrappers = MavenEmbedderWrappersImpl(myProject) + mavenEmbedderWrappers.use { + val mavenEmbedderWrapper = mavenEmbedderWrappers.getEmbedder(baseDir) return function(mavenEmbedderWrapper) } - finally { - manager.release(mavenEmbedderWrapper) - } - } - - private fun executeWithMavenEmbedderWrapperNullable(function: Function): R? { - val manager = MavenProjectsManager.getInstance(myProject).embeddersManager - val mavenEmbedderWrapper = manager.getEmbedder(MavenEmbeddersManager.Companion.FOR_POST_PROCESSING, "") - try { - return function.apply(mavenEmbedderWrapper) - } - finally { - manager.release(mavenEmbedderWrapper) - } } companion object { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.kt index ddcd7106de3c..3bed9195149c 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.kt @@ -80,7 +80,6 @@ import org.jetbrains.idea.maven.model.MavenConstants import org.jetbrains.idea.maven.model.MavenConstants.MODEL_VERSION_4_0_0 import org.jetbrains.idea.maven.model.MavenId import org.jetbrains.idea.maven.model.MavenProjectProblem -import org.jetbrains.idea.maven.model.MavenRemoteRepository import org.jetbrains.idea.maven.project.* import org.jetbrains.idea.maven.server.MavenDistributionsCache import org.jetbrains.idea.maven.server.MavenServerConnector @@ -1925,34 +1924,6 @@ object MavenUtil { return JdkUtil.checkForJdk(sdkRoot.toNioPath(), isWindowsProjectRoot) } - fun getRemoteResolvedRepositories(project: Project): Set { - val projectsManager = MavenProjectsManager.getInstance(project) - val repositories = projectsManager.getRemoteRepositories() - val embeddersManager = projectsManager.getEmbeddersManager() - - var baseDir = project.getBasePath() - val projects = projectsManager.getRootProjects() - if (!projects.isEmpty()) { - baseDir = getBaseDir(projects.get(0)!!.directoryFile).toString() - } - if (null == baseDir) { - baseDir = "" - } - - val embedderWrapper = embeddersManager.getEmbedder(MavenEmbeddersManager.FOR_POST_PROCESSING, baseDir) - try { - val resolvedRepositories = embedderWrapper.resolveRepositories(repositories) - return if (resolvedRepositories.isEmpty()) repositories else resolvedRepositories - } - catch (e: Exception) { - MavenLog.LOG.warn("resolve remote repo error", e) - } - finally { - embeddersManager.release(embedderWrapper) - } - return repositories - } - @JvmStatic fun isMavenizedModule(m: Module): Boolean { try { diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/importing/MavenProjectTest.kt b/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/importing/MavenProjectTest.kt index 0c90fd88fa87..6b6599c5d4b3 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/importing/MavenProjectTest.kt +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/importing/MavenProjectTest.kt @@ -8,7 +8,7 @@ import com.intellij.pom.java.LanguageLevel import kotlinx.coroutines.runBlocking import org.jetbrains.idea.maven.model.MavenArtifactNode import org.jetbrains.idea.maven.model.MavenPlugin -import org.jetbrains.idea.maven.project.MavenEmbeddersManager +import org.jetbrains.idea.maven.project.MavenEmbedderWrappersTestImpl import org.jetbrains.idea.maven.project.MavenProject import org.jetbrains.idea.maven.project.MavenProjectsManager import org.jetbrains.idea.maven.utils.MavenJDOMUtil @@ -682,13 +682,11 @@ class MavenProjectTest : MavenMultiVersionImportingTestCase() { importProjectAsync() val repositories = projectsManager.getRemoteRepositories() - val embeddersManager = projectsManager.embeddersManager - val mavenEmbedderWrapper = embeddersManager.getEmbedder( - MavenEmbeddersManager.FOR_POST_PROCESSING, - MavenUtil.getBaseDir(projectPom).toString()) - - val repoIds = mavenEmbedderWrapper.resolveRepositories(repositories).map { it.id }.toSet() - embeddersManager.release(mavenEmbedderWrapper) + val mavenEmbedderWrappers = MavenEmbedderWrappersTestImpl(project) + val repoIds = mavenEmbedderWrappers.use { + val mavenEmbedderWrapper = mavenEmbedderWrappers.getEmbedder(MavenUtil.getBaseDir(projectPom).toString()) + mavenEmbedderWrapper.resolveRepositories(repositories).map { it.id }.toSet() + } val project = MavenProjectsManager.getInstance(project).findProject(projectPom) assertNotNull(project)