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
The following commit(s) were added to refs/heads/mvn4 by this push:
new 25dd5d9 Add some missing bits
25dd5d9 is described below
commit 25dd5d90708ee4153ac0c74d175eea4b384dc1fd
Author: Guillaume Nodet <[email protected]>
AuthorDate: Tue Feb 15 02:47:38 2022 +0100
Add some missing bits
---
maven-core-api/pom.xml | 8 +++
.../api/{ArtifactMetadata.java => Metadata.java} | 16 ++++-
.../main/java/org/apache/maven/api/Project.java | 9 ++-
.../org/apache/maven/api/RepositoryMetadata.java | 2 +-
.../main/java/org/apache/maven/api/Session.java | 35 +++++++++
.../java/org/apache/maven/api/SessionData.java | 84 ++++++++++++++++++++++
.../api/{ArtifactMetadata.java => Toolchain.java} | 21 +++++-
.../apache/maven/api/services/ArtifactFactory.java | 7 ++
.../maven/api/services/ArtifactFactoryRequest.java | 13 ++++
.../apache/maven/api/services/ArtifactManager.java | 7 +-
...actFactory.java => LocalRepositoryManager.java} | 25 ++++---
.../apache/maven/api/services/ProjectDeployer.java | 5 +-
.../maven/api/services/ProjectDeployerRequest.java | 12 +---
.../apache/maven/api/services/ProjectManager.java | 4 ++
.../RepositoryFactory.java} | 14 +++-
.../ToolchainManager.java} | 13 +++-
maven-core-impl/pom.xml | 9 ++-
.../maven/impl/DefaultLocalRepositoryManager.java | 82 +++++++++++++++++++++
.../maven/impl/DefaultRepositoryFactory.java | 24 ++++++-
.../java/org/apache/maven/impl/DefaultSession.java | 82 +++++++++++++++++++--
.../test/java/org/apache/maven/impl/TestApi.java | 3 +
21 files changed, 431 insertions(+), 44 deletions(-)
diff --git a/maven-core-api/pom.xml b/maven-core-api/pom.xml
index 853b64a..e70bbca 100644
--- a/maven-core-api/pom.xml
+++ b/maven-core-api/pom.xml
@@ -31,6 +31,14 @@
<dependencies>
<dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings</artifactId>
+ </dependency>
+ <dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version>
diff --git
a/maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
b/maven-core-api/src/main/java/org/apache/maven/api/Metadata.java
similarity index 80%
copy from
maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
copy to maven-core-api/src/main/java/org/apache/maven/api/Metadata.java
index 6cee8b6..b3575d2 100644
--- a/maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
+++ b/maven-core-api/src/main/java/org/apache/maven/api/Metadata.java
@@ -19,6 +19,20 @@ package org.apache.maven.api;
* under the License.
*/
-public interface ArtifactMetadata
+public interface Metadata
{
+
+ String getGroupId();
+
+ String getArtifactId();
+
+ String getVersion();
+
+ enum Storage
+ {
+ Group, Artifact, Version
+ }
+
+ Storage getStorage();
+
}
diff --git a/maven-core-api/src/main/java/org/apache/maven/api/Project.java
b/maven-core-api/src/main/java/org/apache/maven/api/Project.java
index 037f718..4d313e4 100644
--- a/maven-core-api/src/main/java/org/apache/maven/api/Project.java
+++ b/maven-core-api/src/main/java/org/apache/maven/api/Project.java
@@ -24,6 +24,8 @@ import javax.annotation.Nonnull;
import java.nio.file.Path;
import java.util.List;
+import org.apache.maven.model.Model;
+
/**
* Interface representing a Maven project.
*/
@@ -46,11 +48,16 @@ public interface Project
Artifact getArtifact();
@Nonnull
- Object getModel();
+ Model getModel();
@Nonnull
Path getPomPath();
+ default Path getBasedir()
+ {
+ return getPomPath().getParent();
+ }
+
@Nonnull
List<Dependency> getDependencies();
diff --git
a/maven-core-api/src/main/java/org/apache/maven/api/RepositoryMetadata.java
b/maven-core-api/src/main/java/org/apache/maven/api/RepositoryMetadata.java
index 2ff856d..e45a31e 100644
--- a/maven-core-api/src/main/java/org/apache/maven/api/RepositoryMetadata.java
+++ b/maven-core-api/src/main/java/org/apache/maven/api/RepositoryMetadata.java
@@ -19,6 +19,6 @@ package org.apache.maven.api;
* under the License.
*/
-public interface RepositoryMetadata extends ArtifactMetadata
+public interface RepositoryMetadata extends Metadata
{
}
diff --git a/maven-core-api/src/main/java/org/apache/maven/api/Session.java
b/maven-core-api/src/main/java/org/apache/maven/api/Session.java
index 6fbc7cd..b4f9dc0 100644
--- a/maven-core-api/src/main/java/org/apache/maven/api/Session.java
+++ b/maven-core-api/src/main/java/org/apache/maven/api/Session.java
@@ -22,9 +22,11 @@ package org.apache.maven.api;
import javax.annotation.Nonnull;
import javax.annotation.concurrent.ThreadSafe;
+import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;
import java.util.NoSuchElementException;
+import java.util.Properties;
import org.apache.maven.api.services.ArtifactDeployer;
import org.apache.maven.api.services.ArtifactDeployerException;
@@ -42,7 +44,9 @@ import org.apache.maven.api.services.DependencyFactory;
import org.apache.maven.api.services.DependencyResolver;
import org.apache.maven.api.services.DependencyResolverException;
import org.apache.maven.api.services.DependencyResolverResult;
+import org.apache.maven.api.services.RepositoryFactory;
import org.apache.maven.api.services.Service;
+import org.apache.maven.settings.Settings;
/**
* The session to install / deploy / resolve artifacts and dependencies.
@@ -52,11 +56,23 @@ public interface Session
{
@Nonnull
+ Settings getSettings();
+
+ @Nonnull
LocalRepository getLocalRepository();
@Nonnull
List<RemoteRepository> getRemoteRepositories();
+ @Nonnull
+ SessionData getData();
+
+ @Nonnull
+ Properties getUserProperties();
+
+ @Nonnull
+ Properties getSystemProperties();
+
/**
* Retrieves the service for the interface
*
@@ -84,6 +100,15 @@ public interface Session
Session withRemoteRepositories( @Nonnull List<RemoteRepository>
repositories );
/**
+ * Shortcut for
<code>getService(RepositoryFactory.class).createLocal(...)</code>
+ */
+ default LocalRepository createLocalRepository( Path path )
+ throws ArtifactFactoryException, IllegalArgumentException
+ {
+ return getService( RepositoryFactory.class ).createLocal( path );
+ }
+
+ /**
* Shortcut for <code>getService(ArtifactFactory.class).create(...)</code>
*/
default Artifact createArtifact( String groupId, String artifactId, String
version, String type )
@@ -94,6 +119,16 @@ public interface Session
}
/**
+ * Shortcut for <code>getService(ArtifactFactory.class).create(...)</code>
+ */
+ default Artifact createArtifact( String groupId, String artifactId, String
classifier, String version, String type )
+ throws ArtifactFactoryException, IllegalArgumentException
+ {
+ return getService( ArtifactFactory.class )
+ .create( this, groupId, artifactId, classifier, version, type
);
+ }
+
+ /**
* Shortcut for
<code>getService(ArtifactResolver.class).resolve(...)</code>
*/
default ArtifactResolverResult resolveArtifact( Artifact artifact )
diff --git a/maven-core-api/src/main/java/org/apache/maven/api/SessionData.java
b/maven-core-api/src/main/java/org/apache/maven/api/SessionData.java
new file mode 100644
index 0000000..bc4d688
--- /dev/null
+++ b/maven-core-api/src/main/java/org/apache/maven/api/SessionData.java
@@ -0,0 +1,84 @@
+package org.apache.maven.api;
+
+/*
+ * 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.
+ */
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.ThreadSafe;
+
+import java.util.function.Supplier;
+
+/**
+ * A container for data that is specific to a session.
+ * All components may use this storage to associate arbitrary data with a
session.
+ * <p>
+ * Unlike a cache, this session data is not subject to purging. For this same
reason, session data should also not be
+ * abused as a cache (i.e. for storing values that can be re-calculated) to
avoid memory exhaustion.
+ * <p>
+ * <strong>Note:</strong> Actual implementations must be thread-safe.
+ *
+ * @see Session#getData()
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @noextend This interface is not intended to be extended by clients.
+ */
+@ThreadSafe
+public interface SessionData
+{
+
+ /**
+ * Associates the specified session data with the given key.
+ *
+ * @param key The key under which to store the session data, must not be
{@code null}.
+ * @param value The data to associate with the key, may be {@code null} to
remove the mapping.
+ */
+ void set( @Nonnull Object key, @Nullable Object value );
+
+ /**
+ * Associates the specified session data with the given key if the key is
currently mapped to the given value. This
+ * method provides an atomic compare-and-update of some key's value.
+ *
+ * @param key The key under which to store the session data, must not be
{@code null}.
+ * @param oldValue The expected data currently associated with the key,
may be {@code null}.
+ * @param newValue The data to associate with the key, may be {@code null}
to remove the mapping.
+ * @return {@code true} if the key mapping was successfully updated from
the old value to the new value,
+ * {@code false} if the current key mapping didn't match the
expected value and was not updated.
+ */
+ boolean set( @Nonnull Object key, @Nullable Object oldValue, @Nullable
Object newValue );
+
+ /**
+ * Gets the session data associated with the specified key.
+ *
+ * @param key The key for which to retrieve the session data, must not be
{@code null}.
+ * @return The session data associated with the key or {@code null} if
none.
+ */
+ @Nullable
+ Object get( @Nonnull Object key );
+
+ /**
+ * Retrieve of compute the data associated with the specified key.
+ *
+ * @param key The key for which to retrieve the session data, must not be
{@code null}.
+ * @param supplier The supplier will compute the new value.
+ * @return The session data associated with the key.
+ */
+ @Nullable
+ Object computeIfAbsent( @Nonnull Object key, @Nonnull Supplier<Object>
supplier );
+
+}
diff --git
a/maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
b/maven-core-api/src/main/java/org/apache/maven/api/Toolchain.java
similarity index 65%
copy from
maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
copy to maven-core-api/src/main/java/org/apache/maven/api/Toolchain.java
index 6cee8b6..a31e5bc 100644
--- a/maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
+++ b/maven-core-api/src/main/java/org/apache/maven/api/Toolchain.java
@@ -19,6 +19,23 @@ package org.apache.maven.api;
* under the License.
*/
-public interface ArtifactMetadata
+/**
+ * Toolchain interface.
+ */
+public interface Toolchain
{
-}
+ /**
+ * get the type of toolchain.
+ *
+ * @return the toolchain type
+ */
+ String getType();
+
+ /**
+ * Gets the platform tool executable.
+ *
+ * @param toolName the tool platform independent tool name.
+ * @return file representing the tool executable, or null if the tool can
not be found
+ */
+ String findTool( String toolName );
+}
\ No newline at end of file
diff --git
a/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactFactory.java
b/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactFactory.java
index 2459409..c1ab305 100644
---
a/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactFactory.java
+++
b/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactFactory.java
@@ -33,4 +33,11 @@ public interface ArtifactFactory extends Service
{
return create( ArtifactFactoryRequest.build( session, groupId,
artifactId, version, type ) );
}
+
+ default Artifact create( Session session, String groupId, String
artifactId,
+ String classifier, String version, String type )
+ throws ArtifactFactoryException, IllegalArgumentException
+ {
+ return create( ArtifactFactoryRequest.build( session, groupId,
artifactId, classifier, version, type ) );
+ }
}
diff --git
a/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactFactoryRequest.java
b/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactFactoryRequest.java
index 4bdf288..4032330 100644
---
a/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactFactoryRequest.java
+++
b/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactFactoryRequest.java
@@ -53,6 +53,19 @@ public interface ArtifactFactoryRequest
.build();
}
+ static ArtifactFactoryRequest build( Session session, String groupId,
String artifactId,
+ String classifier, String version,
String type )
+ {
+ return ArtifactFactoryRequest.builder()
+ .session( session )
+ .groupId( groupId )
+ .artifactId( artifactId )
+ .classifier( classifier )
+ .version( version )
+ .type( type )
+ .build();
+ }
+
static ArtifactFactoryRequestBuilder builder()
{
return new ArtifactFactoryRequestBuilder();
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 f96b014..609a9ac 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
@@ -26,7 +26,7 @@ import java.util.Collection;
import java.util.Optional;
import org.apache.maven.api.Artifact;
-import org.apache.maven.api.ArtifactMetadata;
+import org.apache.maven.api.Metadata;
public interface ArtifactManager extends Service
{
@@ -41,6 +41,9 @@ public interface ArtifactManager extends Service
Optional<Path> getPath( Artifact artifact );
@Nonnull
- Collection<ArtifactMetadata> getAttachedMetadatas( Artifact artifact );
+ Collection<Metadata> getAttachedMetadatas( Artifact artifact );
+ void attachMetadata( @Nonnull Artifact artifact, @Nonnull Metadata
metadata );
+
+ void setPath( Artifact artifact, Path path );
}
diff --git
a/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactFactory.java
b/maven-core-api/src/main/java/org/apache/maven/api/services/LocalRepositoryManager.java
similarity index 55%
copy from
maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactFactory.java
copy to
maven-core-api/src/main/java/org/apache/maven/api/services/LocalRepositoryManager.java
index 2459409..fc9d3b1 100644
---
a/maven-core-api/src/main/java/org/apache/maven/api/services/ArtifactFactory.java
+++
b/maven-core-api/src/main/java/org/apache/maven/api/services/LocalRepositoryManager.java
@@ -9,7 +9,7 @@ package org.apache.maven.api.services;
* "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
+ * 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
@@ -19,18 +19,23 @@ package org.apache.maven.api.services;
* under the License.
*/
-import org.apache.maven.api.Session;
+import java.nio.file.Path;
+
import org.apache.maven.api.Artifact;
+import org.apache.maven.api.LocalRepository;
+import org.apache.maven.api.Metadata;
+import org.apache.maven.api.RemoteRepository;
+import org.apache.maven.api.Session;
-public interface ArtifactFactory extends Service
+public interface LocalRepositoryManager extends Service
{
- Artifact create( ArtifactFactoryRequest request )
- throws ArtifactFactoryException, IllegalArgumentException;
+ Path getPathForLocalArtifact( Session session, LocalRepository local,
Artifact artifact );
+
+ Path getPathForLocalMetadata( Session session, LocalRepository local,
Metadata metadata );
+
+ Path getPathForRemoteArtifact( Session session, LocalRepository local,
RemoteRepository remote, Artifact artifact );
+
+ Path getPathForRemoteMetadata( Session session, LocalRepository local,
RemoteRepository remote, Metadata metadata );
- default Artifact create( Session session, String groupId, String
artifactId, String version, String type )
- throws ArtifactFactoryException, IllegalArgumentException
- {
- return create( ArtifactFactoryRequest.build( session, groupId,
artifactId, version, type ) );
- }
}
diff --git
a/maven-core-api/src/main/java/org/apache/maven/api/services/ProjectDeployer.java
b/maven-core-api/src/main/java/org/apache/maven/api/services/ProjectDeployer.java
index 8fc5281..5f21e4c 100644
---
a/maven-core-api/src/main/java/org/apache/maven/api/services/ProjectDeployer.java
+++
b/maven-core-api/src/main/java/org/apache/maven/api/services/ProjectDeployer.java
@@ -19,6 +19,7 @@ package org.apache.maven.api.services;
* under the License.
*/
+import org.apache.maven.api.RemoteRepository;
import org.apache.maven.api.Session;
import org.apache.maven.api.Project;
@@ -60,9 +61,9 @@ public interface ProjectDeployer extends Service
void deploy( ProjectDeployerRequest request )
throws ProjectDeployerException, IllegalArgumentException;
- default void deploy( Session session, Project project )
+ default void deploy( Session session, Project project, RemoteRepository
repository )
throws ProjectDeployerException, IllegalArgumentException
{
- deploy( ProjectDeployerRequest.build( session, project ) );
+ deploy( ProjectDeployerRequest.build( session, project, repository ) );
}
}
diff --git
a/maven-core-api/src/main/java/org/apache/maven/api/services/ProjectDeployerRequest.java
b/maven-core-api/src/main/java/org/apache/maven/api/services/ProjectDeployerRequest.java
index 27eeffc..e343e86 100644
---
a/maven-core-api/src/main/java/org/apache/maven/api/services/ProjectDeployerRequest.java
+++
b/maven-core-api/src/main/java/org/apache/maven/api/services/ProjectDeployerRequest.java
@@ -38,20 +38,12 @@ public interface ProjectDeployerRequest
int getRetryFailedDeploymentCount();
-// @Nonnull
-// Optional<String> getAltDeploymentRepository();
-
-// @Nonnull
-// Optional<String> getAltSnapshotDeploymentRepository();
-
-// @Nonnull
-// Optional<String> getAltReleaseDeploymentRepository();
-
- static ProjectDeployerRequest build( Session session, Project project )
+ static ProjectDeployerRequest build( Session session, Project project,
RemoteRepository repository )
{
return builder()
.session( session )
.project( project )
+ .repository( repository )
.build();
}
diff --git
a/maven-core-api/src/main/java/org/apache/maven/api/services/ProjectManager.java
b/maven-core-api/src/main/java/org/apache/maven/api/services/ProjectManager.java
index 494882a..0651a26 100644
---
a/maven-core-api/src/main/java/org/apache/maven/api/services/ProjectManager.java
+++
b/maven-core-api/src/main/java/org/apache/maven/api/services/ProjectManager.java
@@ -45,4 +45,8 @@ public interface ProjectManager extends Service
@Nonnull
Collection<Artifact> getAttachedArtifacts( Project project );
+ void attachArtifact( Project project, String type, Path path );
+
+ void attachArtifact( Project project, String trim, String trim1, Path path
);
+
}
diff --git
a/maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
b/maven-core-api/src/main/java/org/apache/maven/api/services/RepositoryFactory.java
similarity index 71%
copy from
maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
copy to
maven-core-api/src/main/java/org/apache/maven/api/services/RepositoryFactory.java
index 6cee8b6..7318bd9 100644
--- a/maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
+++
b/maven-core-api/src/main/java/org/apache/maven/api/services/RepositoryFactory.java
@@ -1,4 +1,4 @@
-package org.apache.maven.api;
+package org.apache.maven.api.services;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,6 +19,16 @@ package org.apache.maven.api;
* under the License.
*/
-public interface ArtifactMetadata
+import java.nio.file.Path;
+
+import org.apache.maven.api.LocalRepository;
+import org.apache.maven.api.RemoteRepository;
+
+public interface RepositoryFactory extends Service
{
+
+ LocalRepository createLocal( Path path );
+
+ RemoteRepository createRemote( String id, String url );
+
}
diff --git
a/maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
b/maven-core-api/src/main/java/org/apache/maven/api/services/ToolchainManager.java
similarity index 67%
copy from
maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
copy to
maven-core-api/src/main/java/org/apache/maven/api/services/ToolchainManager.java
index 6cee8b6..b92ef4f 100644
--- a/maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
+++
b/maven-core-api/src/main/java/org/apache/maven/api/services/ToolchainManager.java
@@ -1,4 +1,4 @@
-package org.apache.maven.api;
+package org.apache.maven.api.services;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,6 +19,15 @@ package org.apache.maven.api;
* under the License.
*/
-public interface ArtifactMetadata
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.api.Session;
+import org.apache.maven.api.Toolchain;
+
+public interface ToolchainManager extends Service
{
+ List<Toolchain> getToolchains( Session session, String jdk, Map<String,
String> jdkToolchain );
+
+ Toolchain getToolchainFromBuildContext( Session session, String jdk );
}
diff --git a/maven-core-impl/pom.xml b/maven-core-impl/pom.xml
index df573ad..8fc09bc 100644
--- a/maven-core-impl/pom.xml
+++ b/maven-core-impl/pom.xml
@@ -38,6 +38,10 @@
<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>
@@ -47,11 +51,6 @@
</dependency>
<dependency>
<groupId>org.apache.maven.resolver</groupId>
- <artifactId>maven-resolver-impl</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.resolver</groupId>
<artifactId>maven-resolver-connector-basic</artifactId>
<scope>test</scope>
</dependency>
diff --git
a/maven-core-impl/src/main/java/org/apache/maven/impl/DefaultLocalRepositoryManager.java
b/maven-core-impl/src/main/java/org/apache/maven/impl/DefaultLocalRepositoryManager.java
new file mode 100644
index 0000000..41bd191
--- /dev/null
+++
b/maven-core-impl/src/main/java/org/apache/maven/impl/DefaultLocalRepositoryManager.java
@@ -0,0 +1,82 @@
+package org.apache.maven.impl;
+
+/*
+ * 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.
+ */
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.apache.maven.api.Artifact;
+import org.apache.maven.api.LocalRepository;
+import org.apache.maven.api.Metadata;
+import org.apache.maven.api.RemoteRepository;
+import org.apache.maven.api.Session;
+import org.apache.maven.api.services.LocalRepositoryManager;
+import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
+
+public class DefaultLocalRepositoryManager implements LocalRepositoryManager
+{
+
+ @Override
+ public Path getPathForLocalArtifact( Session session, LocalRepository
local, Artifact artifact )
+ {
+ DefaultSession s = (DefaultSession) session;
+ return Paths.get( getManager( s, local ).getPathForLocalArtifact(
s.toArtifact( artifact ) ) );
+ }
+
+ @Override
+ public Path getPathForLocalMetadata( Session session, LocalRepository
local, Metadata metadata )
+ {
+ DefaultSession s = (DefaultSession) session;
+ return Paths.get( getManager( s, local ).getPathForLocalMetadata(
s.toMetadata( metadata ) ) );
+ }
+
+ @Override
+ public Path getPathForRemoteArtifact( Session session, LocalRepository
local,
+ RemoteRepository remote, Artifact
artifact )
+ {
+ DefaultSession s = (DefaultSession) session;
+ return Paths.get( getManager( s, local ).getPathForRemoteArtifact(
+ s.toArtifact( artifact ), s.toRepository( remote ), null ) );
+ }
+
+ @Override
+ public Path getPathForRemoteMetadata( Session session, LocalRepository
local,
+ RemoteRepository remote, Metadata
metadata )
+ {
+ DefaultSession s = (DefaultSession) session;
+ return Paths.get( getManager( s, local ).getPathForRemoteMetadata(
+ s.toMetadata( metadata ), s.toRepository( remote ), null ) );
+ }
+
+ private org.eclipse.aether.repository.LocalRepositoryManager getManager(
+ DefaultSession session, LocalRepository local )
+ {
+ try
+ {
+ return session.getLocalRepositoryProvider()
+ .newLocalRepositoryManager( session.getSession(),
session.toRepository( local ) );
+ }
+ catch ( NoLocalRepositoryManagerException e )
+ {
+ throw new IllegalStateException( e );
+ }
+ }
+
+}
diff --git
a/maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
b/maven-core-impl/src/main/java/org/apache/maven/impl/DefaultRepositoryFactory.java
similarity index 52%
rename from
maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
rename to
maven-core-impl/src/main/java/org/apache/maven/impl/DefaultRepositoryFactory.java
index 6cee8b6..5e8e045 100644
--- a/maven-core-api/src/main/java/org/apache/maven/api/ArtifactMetadata.java
+++
b/maven-core-impl/src/main/java/org/apache/maven/impl/DefaultRepositoryFactory.java
@@ -1,4 +1,4 @@
-package org.apache.maven.api;
+package org.apache.maven.impl;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,6 +19,26 @@ package org.apache.maven.api;
* under the License.
*/
-public interface ArtifactMetadata
+import java.nio.file.Path;
+
+import org.apache.maven.api.LocalRepository;
+import org.apache.maven.api.RemoteRepository;
+import org.apache.maven.api.services.RepositoryFactory;
+
+public class DefaultRepositoryFactory implements RepositoryFactory
{
+
+ @Override
+ public LocalRepository createLocal( Path path )
+ {
+ return new DefaultLocalRepository( new
org.eclipse.aether.repository.LocalRepository( "target/repo" ) );
+ }
+
+ @Override
+ public RemoteRepository createRemote( String id, String url )
+ {
+ return new DefaultRemoteRepository(
+ new org.eclipse.aether.repository.RemoteRepository.Builder(
id, "", url )
+ .build() );
+ }
}
diff --git
a/maven-core-impl/src/main/java/org/apache/maven/impl/DefaultSession.java
b/maven-core-impl/src/main/java/org/apache/maven/impl/DefaultSession.java
index 6b37f63..585987b 100644
--- a/maven-core-impl/src/main/java/org/apache/maven/impl/DefaultSession.java
+++ b/maven-core-impl/src/main/java/org/apache/maven/impl/DefaultSession.java
@@ -20,6 +20,7 @@ package org.apache.maven.impl;
*/
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import java.nio.file.Path;
import java.util.Collection;
@@ -28,13 +29,18 @@ import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Objects;
+import java.util.Properties;
import java.util.WeakHashMap;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
+import org.apache.maven.api.SessionData;
+import org.apache.maven.api.services.LocalRepositoryManager;
+import org.apache.maven.api.services.RepositoryFactory;
import org.apache.maven.api.services.Service;
import org.apache.maven.api.Session;
import org.apache.maven.api.Artifact;
-import org.apache.maven.api.ArtifactMetadata;
+import org.apache.maven.api.Metadata;
import org.apache.maven.api.Dependency;
import org.apache.maven.api.Node;
import org.apache.maven.api.Project;
@@ -53,12 +59,13 @@ import org.apache.maven.api.services.DependencyResolver;
import org.apache.maven.api.services.ProjectBuilder;
import org.apache.maven.api.services.ProjectDeployer;
import org.apache.maven.api.services.ProjectInstaller;
+import org.apache.maven.settings.Settings;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.repository.LocalRepositoryManager;
import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
+import org.eclipse.aether.impl.LocalRepositoryProvider;
public class DefaultSession implements Session
{
@@ -69,6 +76,7 @@ public class DefaultSession implements Session
private final List<RemoteRepository> repositories;
private final org.apache.maven.project.ProjectBuilder projectBuilder;
private final MavenRepositorySystem mavenRepositorySystem;
+ private LocalRepositoryProvider localRepositoryProvider;
private final Map<org.eclipse.aether.graph.DependencyNode, Node> allNodes
= Collections.synchronizedMap( new WeakHashMap<>() );
@@ -112,6 +120,59 @@ public class DefaultSession implements Session
@Nonnull
@Override
+ public Settings getSettings()
+ {
+ return null;
+ }
+
+ @Nonnull
+ @Override
+ public Properties getUserProperties()
+ {
+ return null;
+ }
+
+ @Nonnull
+ @Override
+ public Properties getSystemProperties()
+ {
+ return null;
+ }
+
+ @Nonnull
+ @Override
+ public SessionData getData()
+ {
+ org.eclipse.aether.SessionData data = session.getData();
+ return new SessionData()
+ {
+ @Override
+ public void set( @Nonnull Object key, @Nullable Object value )
+ {
+ data.set( key, value );
+ }
+ @Override
+ public boolean set( @Nonnull Object key, @Nullable Object
oldValue, @Nullable Object newValue )
+ {
+ return data.set( key, oldValue, newValue );
+ }
+ @Nullable
+ @Override
+ public Object get( @Nonnull Object key )
+ {
+ return data.get( key );
+ }
+ @Nullable
+ @Override
+ public Object computeIfAbsent( @Nonnull Object key, @Nonnull
Supplier<Object> supplier )
+ {
+ return data.computeIfAbsent( key, supplier );
+ }
+ };
+ }
+
+ @Nonnull
+ @Override
public Session withLocalRepository( @Nonnull LocalRepository
localRepository )
{
Objects.requireNonNull( localRepository, "localRepository" );
@@ -124,7 +185,7 @@ public class DefaultSession implements Session
try
{
org.eclipse.aether.repository.LocalRepository repository =
toRepository( localRepository );
- LocalRepositoryManager localRepositoryManager
+ org.eclipse.aether.repository.LocalRepositoryManager
localRepositoryManager
= localRepositoryManagerFactory.newInstance( session,
repository );
RepositorySystemSession newSession = new
DefaultRepositorySystemSession( session )
@@ -193,6 +254,14 @@ public class DefaultSession implements Session
{
return (T) new DefaultProjectInstaller( repositorySystem );
}
+ else if ( clazz == LocalRepositoryManager.class )
+ {
+ return (T) new DefaultLocalRepositoryManager();
+ }
+ else if ( clazz == RepositoryFactory.class )
+ {
+ return (T) new DefaultRepositoryFactory();
+ }
throw new NoSuchElementException( clazz.getName() );
}
@@ -201,6 +270,11 @@ public class DefaultSession implements Session
return session;
}
+ public LocalRepositoryProvider getLocalRepositoryProvider()
+ {
+ return localRepositoryProvider;
+ }
+
public RemoteRepository getRemoteRepository(
org.eclipse.aether.repository.RemoteRepository repository )
{
return allRepositories.computeIfAbsent( repository,
DefaultRemoteRepository::new );
@@ -356,7 +430,7 @@ public class DefaultSession implements Session
}
}
- public org.eclipse.aether.metadata.Metadata toMetadata( ArtifactMetadata
metadata )
+ public org.eclipse.aether.metadata.Metadata toMetadata( Metadata metadata )
{
/*
if ( metadata instanceof ProjectArtifactMetadata )
diff --git a/maven-core-impl/src/test/java/org/apache/maven/impl/TestApi.java
b/maven-core-impl/src/test/java/org/apache/maven/impl/TestApi.java
index 7736f81..b91dcf0 100644
--- a/maven-core-impl/src/test/java/org/apache/maven/impl/TestApi.java
+++ b/maven-core-impl/src/test/java/org/apache/maven/impl/TestApi.java
@@ -21,6 +21,7 @@ package org.apache.maven.impl;
import javax.inject.Inject;
+import java.nio.file.Paths;
import java.util.Collections;
import org.apache.maven.api.Project;
@@ -29,6 +30,7 @@ import org.apache.maven.api.Artifact;
import org.apache.maven.api.Node;
import org.apache.maven.api.services.ProjectBuilder;
import org.apache.maven.api.services.ProjectBuilderRequest;
+import org.apache.maven.api.services.RepositoryFactory;
import org.apache.maven.bridge.MavenRepositorySystem;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.codehaus.plexus.testing.PlexusTest;
@@ -75,6 +77,7 @@ public class TestApi
new RemoteRepository.Builder( "mirror", "default",
"file:target/test-classes/repo" ).build() );
this.session = session
+ .withLocalRepository( session.getService(
RepositoryFactory.class ).createLocal( Paths.get( "target/repo" ) ) )
.withLocalRepository( localRepository )
.withRemoteRepositories( Collections.singletonList(
remoteRepository ) );
}