You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2022/03/10 07:13:10 UTC
[maven] 09/12: runtime support
This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch mvn4
in repository https://gitbox.apache.org/repos/asf/maven.git
commit dea91e2d7fb5bd7b41ac94f074e6bf5348bded98
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Tue Mar 8 11:48:02 2022 +0100
runtime support
---
.../main/java/org/apache/maven/api/Metadata.java | 3 +
.../apache/maven/api/services/ArtifactManager.java | 6 ++
maven-core-impl/pom.xml | 71 ----------------------
.../internal/impl/DefaultArtifactManager.java | 3 +-
.../impl/DefaultLocalRepositoryManager.java | 8 ++-
.../maven/internal/impl/DefaultProjectManager.java | 37 ++++++++---
.../internal/impl/DefaultRepositoryFactory.java | 10 +--
.../apache/maven/internal/impl/DefaultSession.java | 31 +++++-----
.../plugin/PluginParameterExpressionEvaluator.java | 10 ++-
9 files changed, 79 insertions(+), 100 deletions(-)
diff --git a/maven-core-api/src/main/java/org/apache/maven/api/Metadata.java b/maven-core-api/src/main/java/org/apache/maven/api/Metadata.java
index b3575d2..d0b83ef 100644
--- a/maven-core-api/src/main/java/org/apache/maven/api/Metadata.java
+++ b/maven-core-api/src/main/java/org/apache/maven/api/Metadata.java
@@ -19,6 +19,9 @@ package org.apache.maven.api;
* under the License.
*/
+/**
+ * TODO: investigate removing the Metadata api completely
+ */
public interface Metadata
{
diff --git a/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactManager.java b/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactManager.java
index 949a50e..48488a5 100644
--- a/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactManager.java
+++ b/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactManager.java
@@ -43,9 +43,15 @@ public interface ArtifactManager extends Service
*/
void setPath( @Nonnull Artifact artifact, Path path );
+ /**
+ * TODO: investigate removing the Metadata api completely
+ */
@Nonnull
Collection<Metadata> getAttachedMetadatas( @Nonnull Artifact artifact );
+ /**
+ * TODO: investigate removing the Metadata api completely
+ */
void attachMetadata( @Nonnull Artifact artifact, @Nonnull Metadata metadata );
/**
diff --git a/maven-core-impl/pom.xml b/maven-core-impl/pom.xml
deleted file mode 100644
index 65551b4..0000000
--- a/maven-core-impl/pom.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven</artifactId>
- <version>4.0.0-alpha-1-SNAPSHOT</version>
- </parent>
-
- <artifactId>maven-core-impl</artifactId>
- <name>Apache Maven Core API Implementation</name>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-core-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.resolver</groupId>
- <artifactId>maven-resolver-impl</artifactId>
- </dependency>
-
- <!-- Testing -->
- <dependency>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-testing</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.resolver</groupId>
- <artifactId>maven-resolver-connector-basic</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.resolver</groupId>
- <artifactId>maven-resolver-transport-http</artifactId>
- <version>${resolverVersion}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.resolver</groupId>
- <artifactId>maven-resolver-transport-file</artifactId>
- <version>${resolverVersion}</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
-</project>
diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactManager.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactManager.java
index 6d7706f..60b338b 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactManager.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactManager.java
@@ -51,7 +51,8 @@ public class DefaultArtifactManager implements ArtifactManager
@Override
public Optional<Path> getPath( @Nonnull Artifact artifact )
{
- return Optional.ofNullable( paths.get( artifact ) );
+ Path path = paths.get( artifact );
+ return path != null ? Optional.of( path ) : artifact.getPath();
}
@Override
diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLocalRepositoryManager.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLocalRepositoryManager.java
index 54d6c06..450791d 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLocalRepositoryManager.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultLocalRepositoryManager.java
@@ -70,8 +70,12 @@ public class DefaultLocalRepositoryManager implements LocalRepositoryManager
private org.eclipse.aether.repository.LocalRepositoryManager getManager(
DefaultSession session, LocalRepository local )
{
- return session.getRepositorySystem()
- .newLocalRepositoryManager( session.getSession(), session.toRepository( local ) );
+ org.eclipse.aether.repository.LocalRepository repository = session.toRepository( local );
+ if ( "enhanced".equals( repository.getContentType() ) )
+ {
+ repository = new org.eclipse.aether.repository.LocalRepository( repository.getBasedir(), "" );
+ }
+ return session.getRepositorySystem().newLocalRepositoryManager( session.getSession(), repository );
}
}
diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProjectManager.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProjectManager.java
index aeb0c9e..ba27d0b 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProjectManager.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProjectManager.java
@@ -23,60 +23,83 @@ import javax.annotation.Nonnull;
import java.nio.file.Path;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
import org.apache.maven.api.Artifact;
import org.apache.maven.api.Node;
import org.apache.maven.api.Project;
import org.apache.maven.api.RemoteRepository;
+import org.apache.maven.api.services.ArtifactManager;
import org.apache.maven.api.services.ProjectManager;
public class DefaultProjectManager implements ProjectManager
{
+ private final Map<Project, Path> paths = new ConcurrentHashMap<>();
+ private final Map<Project, Collection<Artifact>> attachedArtifacts = new ConcurrentHashMap<>();
+ private final Map<Project, List<String>> compileSourceRoots = new ConcurrentHashMap<>();
+ private final Map<Project, List<String>> testCompileSourceRoots = new ConcurrentHashMap<>();
+ private final ArtifactManager artifactManager;
+
+ public DefaultProjectManager( ArtifactManager artifactManager )
+ {
+ this.artifactManager = artifactManager;
+ }
+
@Nonnull
@Override
public Optional<Path> getPath( Project project )
{
- return Optional.empty();
+ return Optional.ofNullable( paths.get( project ) );
}
@Nonnull
@Override
public Collection<Artifact> getAttachedArtifacts( Project project )
{
- return null;
+ Collection<Artifact> attached = attachedArtifacts.get( project );
+ return attached != null ? Collections.unmodifiableCollection( attached ) : Collections.emptyList();
}
@Override
public void attachArtifact( Project project, Artifact artifact, Path path )
{
-
+ attachedArtifacts.computeIfAbsent( project, p -> new CopyOnWriteArrayList<>() )
+ .add( artifact );
+ artifactManager.setPath( artifact, path );
}
@Override
public List<String> getCompileSourceRoots( Project project )
{
- return null;
+ List<String> roots = compileSourceRoots.get( project );
+ return roots != null ? Collections.unmodifiableList( roots ) : Collections.emptyList();
}
@Override
public void addCompileSourceRoot( Project project, String sourceRoot )
{
-
+ compileSourceRoots.computeIfAbsent( project, p -> new CopyOnWriteArrayList<>() )
+ .add( sourceRoot );
}
@Override
public List<String> getTestCompileSourceRoots( Project project )
{
- return null;
+ List<String> roots = testCompileSourceRoots.get( project );
+ return roots != null ? Collections.unmodifiableList( roots ) : Collections.emptyList();
}
@Override
public void addTestCompileSourceRoot( Project project, String sourceRoot )
{
-
+ testCompileSourceRoots.computeIfAbsent( project, p -> new CopyOnWriteArrayList<>() )
+ .add( sourceRoot );
}
@Override
diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultRepositoryFactory.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultRepositoryFactory.java
index e6595f7..c7430b7 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultRepositoryFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultRepositoryFactory.java
@@ -26,6 +26,7 @@ import org.apache.maven.api.RemoteRepository;
import org.apache.maven.api.services.RepositoryFactory;
import org.apache.maven.model.Repository;
import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.repository.RepositoryPolicy;
public class DefaultRepositoryFactory implements RepositoryFactory
{
@@ -47,7 +48,7 @@ public class DefaultRepositoryFactory implements RepositoryFactory
public RemoteRepository createRemote( String id, String url )
{
return new DefaultRemoteRepository(
- new org.eclipse.aether.repository.RemoteRepository.Builder( id, "", url )
+ new org.eclipse.aether.repository.RemoteRepository.Builder( id, "default", url )
.build() );
}
@@ -67,8 +68,8 @@ public class DefaultRepositoryFactory implements RepositoryFactory
org.apache.maven.model.RepositoryPolicy policy )
{
boolean enabled = true;
- String updatePolicy = null;
- String checksumPolicy = null;
+ String updatePolicy = RepositoryPolicy.UPDATE_POLICY_DAILY;
+ String checksumPolicy = RepositoryPolicy.CHECKSUM_POLICY_FAIL;
if ( policy != null )
{
enabled = policy.isEnabled();
@@ -81,6 +82,7 @@ public class DefaultRepositoryFactory implements RepositoryFactory
checksumPolicy = policy.getChecksumPolicy();
}
}
- return new org.eclipse.aether.repository.RepositoryPolicy( enabled, updatePolicy, checksumPolicy );
+ return new org.eclipse.aether.repository.RepositoryPolicy(
+ enabled, updatePolicy, checksumPolicy );
}
}
diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultSession.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultSession.java
index 72c6dba..2671c3c 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultSession.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultSession.java
@@ -22,6 +22,7 @@ package org.apache.maven.internal.impl;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+import java.io.File;
import java.nio.file.Path;
import java.util.Collection;
import java.util.Collections;
@@ -82,7 +83,7 @@ public class DefaultSession implements Session
private final DefaultToolchainManagerPrivate toolchainManagerPrivate;
private final List<Listener> listeners = new CopyOnWriteArrayList<>();
private final ArtifactManager artifactManager = new DefaultArtifactManager();
- private final ProjectManager projectManager = new DefaultProjectManager();
+ private final ProjectManager projectManager = new DefaultProjectManager( artifactManager );
private final Map<org.eclipse.aether.graph.DependencyNode, Node> allNodes
= Collections.synchronizedMap( new WeakHashMap<>() );
@@ -424,22 +425,24 @@ public class DefaultSession implements Session
public org.eclipse.aether.artifact.Artifact toArtifact( Artifact artifact )
{
+ File file = getService( ArtifactManager.class ).getPath( artifact ).map( Path::toFile ).orElse( null );
if ( artifact instanceof DefaultArtifact )
{
- return ( ( DefaultArtifact ) artifact ).getArtifact();
- }
- else
- {
- return new org.eclipse.aether.artifact.DefaultArtifact(
- artifact.getGroupId(),
- artifact.getArtifactId(),
- artifact.getClassifier(),
- artifact.getExtension(),
- artifact.getVersion(),
- null,
- getService( ArtifactManager.class ).getPath( artifact ).map( Path::toFile ).orElse( null )
- );
+ org.eclipse.aether.artifact.Artifact a = ( (DefaultArtifact) artifact ).getArtifact();
+ if ( Objects.equals( file, a.getFile() ) )
+ {
+ return a;
+ }
}
+ return new org.eclipse.aether.artifact.DefaultArtifact(
+ artifact.getGroupId(),
+ artifact.getArtifactId(),
+ artifact.getClassifier(),
+ artifact.getExtension(),
+ artifact.getVersion(),
+ null,
+ file
+ );
}
public org.eclipse.aether.metadata.Metadata toMetadata( Metadata metadata )
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java b/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
index 6f00873..6ae8d7d 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
@@ -23,6 +23,7 @@ import java.io.File;
import java.util.Properties;
import org.apache.maven.execution.MavenSession;
+import org.apache.maven.internal.impl.DefaultSession;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.project.MavenProject;
@@ -243,7 +244,14 @@ public class PluginParameterExpressionEvaluator
}
else if ( "project".equals( expression ) )
{
- value = project;
+ if ( mojoDescriptor.isV4Api() )
+ {
+ value = ( (DefaultSession) session.getSession() ).getProject( project );
+ }
+ else
+ {
+ value = project;
+ }
}
else if ( "executedProject".equals( expression ) )
{