Fix m-deploy-p ITs
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 9fa9c79..386dda4 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
@@ -50,12 +50,19 @@ public interface Project
     @Nonnull
     Model getModel();
 
-    @Nonnull
+    /**
+     * Returns the path to the pom file for this project.
+     * A project is usually read from the file system and this will point to
+     * the file.  In some cases, a transient project can be created which
+     * will not point to an actual pom file.
+     * @return the path of the pom
+     */
     Path getPomPath();
 
     default Path getBasedir()
     {
-        return getPomPath().getParent();
+        Path pomPath = getPomPath();
+        return pomPath != null ? pomPath.getParent() : null;
     }
 
     @Nonnull
diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java
index fd902fb..37b669a 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java
@@ -98,4 +98,31 @@ public Optional<Path> getPath()
     {
         return Optional.ofNullable( artifact.getFile() ).map( File::toPath );
     }
+
+    @Override
+    public boolean equals( Object o )
+    {
+        if ( this == o )
+        {
+            return true;
+        }
+        if ( o == null || getClass() != o.getClass() )
+        {
+            return false;
+        }
+        DefaultArtifact that = (DefaultArtifact) o;
+        return artifact.equals( that.artifact );
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return Objects.hash( artifact );
+    }
+
+    @Override
+    public String toString()
+    {
+        return artifact.toString();
+    }
 }
diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java
index e15386b..5677cf9 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java
@@ -22,6 +22,7 @@
 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;
@@ -48,6 +49,16 @@ public DefaultProject( DefaultSession session, MavenProject project )
         this.project = project;
     }
 
+    public DefaultSession getSession()
+    {
+        return session;
+    }
+
+    public MavenProject getProject()
+    {
+        return project;
+    }
+
     @Nonnull
     @Override
     public String getGroupId()
@@ -94,7 +105,8 @@ public Model getModel()
     @Override
     public Path getPomPath()
     {
-        return project.getFile().toPath();
+        File file = project.getFile();
+        return file != null ? file.toPath() : null;
     }
 
     @Nonnull
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 ba27d0b..079d181 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
@@ -25,11 +25,10 @@
 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 java.util.stream.Collectors;
 
+import org.apache.maven.RepositoryUtils;
 import org.apache.maven.api.Artifact;
 import org.apache.maven.api.Node;
 import org.apache.maven.api.Project;
@@ -40,10 +39,6 @@
 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 )
@@ -55,51 +50,55 @@ public DefaultProjectManager( ArtifactManager artifactManager )
     @Override
     public Optional<Path> getPath( Project project )
     {
-        return Optional.ofNullable( paths.get( project ) );
+        throw new UnsupportedOperationException();
     }
 
     @Nonnull
     @Override
     public Collection<Artifact> getAttachedArtifacts( Project project )
     {
-        Collection<Artifact> attached = attachedArtifacts.get( project );
-        return attached != null ? Collections.unmodifiableCollection( attached ) : Collections.emptyList();
+        DefaultSession session = ( (DefaultProject ) project ).getSession();
+        Collection<Artifact> attached = ( ( DefaultProject ) project ).getProject().getAttachedArtifacts().stream()
+                .map( RepositoryUtils::toArtifact )
+                .map( session::getArtifact )
+                .collect( Collectors.toList() );
+        return Collections.unmodifiableCollection( attached );
     }
 
     @Override
     public void attachArtifact( Project project, Artifact artifact, Path path )
     {
-        attachedArtifacts.computeIfAbsent( project, p -> new CopyOnWriteArrayList<>() )
-                .add( artifact );
+        ( ( DefaultProject ) project ).getProject().addAttachedArtifact(
+                RepositoryUtils.toArtifact( ( ( DefaultProject ) project ).getSession().toArtifact( artifact ) ) );
         artifactManager.setPath( artifact, path );
     }
 
     @Override
     public List<String> getCompileSourceRoots( Project project )
     {
-        List<String> roots = compileSourceRoots.get( project );
-        return roots != null ? Collections.unmodifiableList( roots ) : Collections.emptyList();
+        List<String> roots = ( ( DefaultProject ) project ).getProject().getCompileSourceRoots();
+        return Collections.unmodifiableList( roots );
     }
 
     @Override
     public void addCompileSourceRoot( Project project, String sourceRoot )
     {
-        compileSourceRoots.computeIfAbsent( project, p -> new CopyOnWriteArrayList<>() )
-                .add( sourceRoot );
+        List<String> roots = ( ( DefaultProject ) project ).getProject().getCompileSourceRoots();
+        roots.add( sourceRoot );
     }
 
     @Override
     public List<String> getTestCompileSourceRoots( Project project )
     {
-        List<String> roots = testCompileSourceRoots.get( project );
-        return roots != null ? Collections.unmodifiableList( roots ) : Collections.emptyList();
+        List<String> roots = ( ( DefaultProject ) project ).getProject().getTestCompileSourceRoots();
+        return Collections.unmodifiableList( roots );
     }
 
     @Override
     public void addTestCompileSourceRoot( Project project, String sourceRoot )
     {
-        testCompileSourceRoots.computeIfAbsent( project, p -> new CopyOnWriteArrayList<>() )
-                .add( sourceRoot );
+        List<String> roots = ( ( DefaultProject ) project ).getProject().getTestCompileSourceRoots();
+        roots.add( sourceRoot );
     }
 
     @Override
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 2671c3c..39a181a 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
@@ -91,7 +91,7 @@ public class DefaultSession implements Session
             = Collections.synchronizedMap( new WeakHashMap<>() );
     private final Map<org.eclipse.aether.repository.RemoteRepository, RemoteRepository> allRepositories
             = Collections.synchronizedMap( new WeakHashMap<>() );
-    private final Map<MavenProject, Project> allProjects
+    private final Map<String, Project> allProjects
             = Collections.synchronizedMap( new WeakHashMap<>() );
     private final Map<org.eclipse.aether.graph.Dependency, Dependency> allDependencies
             = Collections.synchronizedMap( new WeakHashMap<>() );
@@ -310,7 +310,7 @@ public Dependency getDependency( org.eclipse.aether.graph.Dependency dependency
 
     public Project getProject( MavenProject project )
     {
-        return allProjects.computeIfAbsent( project, p -> new DefaultProject( this, p ) );
+        return allProjects.computeIfAbsent( project.getId(), id -> new DefaultProject( this, project ) );
     }
 
     public List<org.eclipse.aether.repository.RemoteRepository> toRepositories( List<RemoteRepository> repositories )