[maven][IDEA-363195] resolve maven projects in specific embedder

(cherry picked from commit ed3b85ff56fa7d2513cd524be778fe10855cfedf)

Reviewed-by: IJ-CR-149760

GitOrigin-RevId: 053cd10a33aaedc37545fd17183000e32c7a8f7e
This commit is contained in:
Alexander Bubenchikov
2024-11-19 13:53:01 +01:00
committed by intellij-monorepo-bot
parent 7a2e87e8e7
commit e48ed52bd5
2 changed files with 57 additions and 2 deletions

View File

@@ -83,7 +83,6 @@ class MavenProjectResolver(private val myProject: Project) {
eventHandler: MavenEventHandler): MavenProjectResolutionResult {
val updateSnapshots = MavenProjectsManager.getInstance(myProject).forceUpdateSnapshots || generalSettings.isAlwaysUpdateSnapshots
val projectsWithUnresolvedPlugins = HashMap<String, Collection<MavenProject>>()
val pomToDependencyHash = tree.projects.associate { it.file to if (incrementally) it.dependencyHash else null }
val projectMultiMap = MavenUtil.groupByBasedir(mavenProjects, tree)
for ((baseDir, mavenProjectsInBaseDir) in projectMultiMap.entrySet()) {
val embedder = embeddersManager.getEmbedder(MavenEmbeddersManager.FOR_DEPENDENCIES_RESOLVE, baseDir)
@@ -95,6 +94,7 @@ class MavenProjectResolver(private val myProject: Project) {
mavenImporter.customizeUserProperties(myProject, mavenProject, userProperties)
}
}
val pomToDependencyHash = mavenProjectsInBaseDir.associate { it.file to if (incrementally) it.dependencyHash else null }
val projectsWithUnresolvedPluginsChunk = withContext(tracer.span("doResolve $baseDir")) {
doResolve(
pomToDependencyHash,
@@ -133,7 +133,7 @@ class MavenProjectResolver(private val myProject: Project) {
MavenUtil.restartConfigHighlighting(mavenProjects)
if (incrementally && updateSnapshots) {
updateSnapshotsAfterIncrementalSync(tree, pomToDependencyHash, embeddersManager, progressReporter, eventHandler)
updateSnapshotsAfterIncrementalSync(tree, tree.projects.associate {it.file to it.dependencyHash}, embeddersManager, progressReporter, eventHandler)
}
return MavenProjectResolutionResult(projectsWithUnresolvedPlugins)
}

View File

@@ -2633,4 +2633,59 @@ class DependenciesImportingTest : MavenMultiVersionImportingTestCase() {
assertModuleLibDep("m1", "Maven: ATTACHED-JAR: test:m2:1", "jar://" + FileUtil.toSystemIndependentName(jarPath) + "!/")
assertModuleLibDeps("m2")
}
@Test
fun testTwoLinkedProjectsFromDifferentBasedirsShouldBeResolvedInDifferentEmbedders() = runBlocking {
assumeMaven3()
val project1 = createModulePom("project1",
"""
<groupId>org.example</groupId>
<artifactId>project1</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<pom.myversion>${'$'}{myversion}</pom.myversion>
</properties>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>${'$'}{pom.myversion}</version>
</dependency>
</dependencies>
""")
createProjectSubFile("project1/.mvn/jvm.config", "-Dmyversion=1")
val project2 = createModulePom("project2",
"""
<groupId>org.example</groupId>
<artifactId>project2</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<pom.myversion>${'$'}{myversion}</pom.myversion>
</properties>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>${'$'}{pom.myversion}</version>
</dependency>
</dependencies>
""")
createProjectSubFile("project2/.mvn/jvm.config", "-Dmyversion=2")
importProjectsAsync(project1, project2)
assertModules("project1", "project2")
assertModuleLibDeps("project1", "Maven: test:test:1")
assertModuleLibDeps("project2", "Maven: test:test:2")
}
}