mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-05 01:50:56 +07:00
[maven] [IDEA-356114] use maven core extendable ArtifactTypeRegistry in maven 4 server
GitOrigin-RevId: fcf949ea4b6cb097f7ff714b117576a9ef64c9fb
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d1fa4c9739
commit
11c1678a20
@@ -3,10 +3,16 @@ package com.intellij.maven.server.m40;
|
||||
|
||||
import com.intellij.maven.server.m40.utils.Maven40TransferListenerAdapter;
|
||||
import com.intellij.maven.server.m40.utils.Maven40WorkspaceMapReader;
|
||||
import org.apache.maven.api.PathType;
|
||||
import org.apache.maven.api.Type;
|
||||
import org.apache.maven.api.services.TypeRegistry;
|
||||
import org.apache.maven.execution.MavenExecutionRequest;
|
||||
import org.apache.maven.repository.internal.MavenSessionBuilderSupplier;
|
||||
import org.apache.maven.repository.internal.type.DefaultType;
|
||||
import org.eclipse.aether.RepositorySystem;
|
||||
import org.eclipse.aether.RepositorySystemSession;
|
||||
import org.eclipse.aether.artifact.ArtifactType;
|
||||
import org.eclipse.aether.artifact.ArtifactTypeRegistry;
|
||||
import org.eclipse.aether.repository.LocalRepository;
|
||||
import org.eclipse.aether.repository.RepositoryPolicy;
|
||||
import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
|
||||
@@ -25,6 +31,7 @@ public class IdeaMavenSessionBuilderSupplier extends MavenSessionBuilderSupplier
|
||||
private final MavenWorkspaceMap myWorkspaceMap;
|
||||
private final MavenServerConsoleIndicatorImpl myIndicator;
|
||||
private final Path myLocalRepoPath;
|
||||
@NotNull private final TypeRegistry myTypeRegistry;
|
||||
private final Map<String, String> mySystemProperties = new HashMap<>();
|
||||
private final Map<String, String> myUserProperties = new HashMap<>();
|
||||
private final boolean myUpdateSnapshots;
|
||||
@@ -32,11 +39,13 @@ public class IdeaMavenSessionBuilderSupplier extends MavenSessionBuilderSupplier
|
||||
public IdeaMavenSessionBuilderSupplier(RepositorySystem repositorySystem,
|
||||
MavenWorkspaceMap map,
|
||||
MavenServerConsoleIndicatorImpl indicator,
|
||||
@NotNull MavenExecutionRequest request) {
|
||||
@NotNull MavenExecutionRequest request,
|
||||
@NotNull TypeRegistry typeRegistry) {
|
||||
super(repositorySystem);
|
||||
myWorkspaceMap = map;
|
||||
myIndicator = indicator;
|
||||
myLocalRepoPath = request.getLocalRepositoryPath().toPath();
|
||||
myTypeRegistry = typeRegistry;
|
||||
putAll(request.getSystemProperties(), mySystemProperties);
|
||||
putAll(request.getUserProperties(), myUserProperties);
|
||||
myUpdateSnapshots = request.isUpdateSnapshots();
|
||||
@@ -62,4 +71,30 @@ public class IdeaMavenSessionBuilderSupplier extends MavenSessionBuilderSupplier
|
||||
session.setMetadataUpdatePolicy(RepositoryPolicy.UPDATE_POLICY_ALWAYS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ArtifactTypeRegistry getArtifactTypeRegistry() {
|
||||
return new TypeRegistryWrapper();
|
||||
}
|
||||
|
||||
private class TypeRegistryWrapper implements ArtifactTypeRegistry {
|
||||
|
||||
@Override
|
||||
public ArtifactType get(String typeId) {
|
||||
Type type = myTypeRegistry.require(typeId);
|
||||
if (type instanceof ArtifactType) {
|
||||
return (ArtifactType)type;
|
||||
}
|
||||
if (type != null) {
|
||||
return new DefaultType(
|
||||
type.id(),
|
||||
type.getLanguage(),
|
||||
type.getExtension(),
|
||||
type.getClassifier(),
|
||||
type.isIncludesDependencies(),
|
||||
type.getPathTypes().toArray(new PathType[0]));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import org.apache.maven.*;
|
||||
import org.apache.maven.api.*;
|
||||
import org.apache.maven.api.services.ArtifactResolver;
|
||||
import org.apache.maven.api.services.ArtifactResolverResult;
|
||||
import org.apache.maven.api.services.TypeRegistry;
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.artifact.InvalidRepositoryException;
|
||||
import org.apache.maven.artifact.factory.ArtifactFactory;
|
||||
@@ -582,7 +583,7 @@ public class Maven40ServerEmbedderImpl extends MavenServerEmbeddedBase {
|
||||
DefaultSessionFactory factory = getComponent(DefaultSessionFactory.class);
|
||||
|
||||
IdeaMavenSessionBuilderSupplier sessionBuilderSupplier =
|
||||
new IdeaMavenSessionBuilderSupplier(repositorySystem, workspaceMap, indicator, request);
|
||||
new IdeaMavenSessionBuilderSupplier(repositorySystem, workspaceMap, indicator, request, getComponent(TypeRegistry.class));
|
||||
try (RepositorySystemSession.CloseableSession repositorySystemSession = sessionBuilderSupplier.get().build()) {
|
||||
MavenSession mavenSession = new MavenSession(repositorySystemSession, request, result);
|
||||
InternalSession internalSession = factory.newSession(mavenSession);
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.idea.maven.importing
|
||||
|
||||
import com.intellij.maven.testFramework.MavenMultiVersionImportingTestCase
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.Test
|
||||
|
||||
class MavenCustomArtifactTypeImportingTest : MavenMultiVersionImportingTestCase() {
|
||||
|
||||
|
||||
@Test
|
||||
fun `should import dependency with custom plugin type`() = runBlocking {
|
||||
importProjectAsync("""
|
||||
<groupId>test</groupId>
|
||||
<artifactId>project</artifactId>
|
||||
<version>1.0</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.sonarsource.java</groupId>
|
||||
<artifactId>sonar-java-plugin</artifactId>
|
||||
<version>8.1.0.36477</version>
|
||||
<scope>provided</scope>
|
||||
<type>sonar-plugin</type>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
|
||||
<artifactId>sonar-packaging-maven-plugin</artifactId>
|
||||
<version>1.23.0.740</version>
|
||||
<extensions>true</extensions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
""")
|
||||
|
||||
assertModules("project")
|
||||
val project = projectsManager.findProject(projectPom)
|
||||
assertNotNull(project)
|
||||
assertEmpty(project!!.problems)
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user