[MDEPLOY-314] Include artifactId in DeployMojo#processProject messages

Enhance messages on deployAtEnd

---

https://issues.apache.org/jira/browse/MDEPLOY-314
diff --git a/src/main/java/org/apache/maven/plugins/deploy/DeployMojo.java b/src/main/java/org/apache/maven/plugins/deploy/DeployMojo.java
index c3ea850..79ee1d8 100644
--- a/src/main/java/org/apache/maven/plugins/deploy/DeployMojo.java
+++ b/src/main/java/org/apache/maven/plugins/deploy/DeployMojo.java
@@ -308,7 +308,8 @@
         if (isFile(pomArtifact.getFile())) {
             request.addArtifact(pomArtifact);
         } else {
-            throw new MojoExecutionException("The project POM could not be attached");
+            throw new MojoExecutionException(
+                    "The POM for project " + project.getArtifactId() + " could not be attached");
         }
 
         // is not packaged, is "incomplete"
@@ -319,18 +320,19 @@
             } else if (!project.getAttachedArtifacts().isEmpty()) {
                 if (allowIncompleteProjects) {
                     getLog().warn("");
-                    getLog().warn("The packaging plugin for this project did not assign");
+                    getLog().warn("The packaging plugin for project " + project.getArtifactId() + " did not assign");
                     getLog().warn("a main file to the project but it has attachments. Change packaging to 'pom'.");
                     getLog().warn("");
                     getLog().warn("Incomplete projects like this will fail in future Maven versions!");
                     getLog().warn("");
                 } else {
-                    throw new MojoExecutionException("The packaging plugin for this project did not assign "
-                            + "a main file to the project but it has attachments. Change packaging to 'pom'.");
+                    throw new MojoExecutionException("The packaging plugin for project " + project.getArtifactId()
+                            + " did not assign a main file to the project but it has attachments. Change packaging"
+                            + " to 'pom'.");
                 }
             } else {
-                throw new MojoExecutionException(
-                        "The packaging for this project did not assign a file to the build artifact");
+                throw new MojoExecutionException("The packaging plugin for project " + project.getArtifactId()
+                        + " did not assign a file to the build artifact");
             }
         }
 
diff --git a/src/test/java/org/apache/maven/plugins/deploy/DeployMojoTest.java b/src/test/java/org/apache/maven/plugins/deploy/DeployMojoTest.java
index 3b0df77..5884ae1 100644
--- a/src/test/java/org/apache/maven/plugins/deploy/DeployMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/deploy/DeployMojoTest.java
@@ -23,6 +23,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
+import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.maven.execution.MavenSession;
@@ -36,10 +37,12 @@
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.codehaus.plexus.util.FileUtils;
 import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.internal.impl.DefaultLocalPathComposer;
 import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
 import org.eclipse.aether.repository.LocalRepository;
 import org.eclipse.aether.repository.RemoteRepository;
+import org.junit.Ignore;
 import org.mockito.InjectMocks;
 import org.mockito.MockitoAnnotations;
 
@@ -470,10 +473,46 @@
 
         try {
             mojo.execute();
-
             fail("Did not throw mojo execution exception");
         } catch (MojoExecutionException e) {
-            // expected
+            // expected, message should include artifactId
+            assertEquals(
+                    "The packaging plugin for project maven-deploy-test did not assign a file to the build artifact",
+                    e.getMessage());
+        }
+    }
+
+    public void testDeployIfProjectFileIsNull() throws Exception {
+        File testPom = new File(getBasedir(), "target/test-classes/unit/basic-deploy-test/plugin-config.xml");
+
+        DeployMojo mojo = (DeployMojo) lookupMojo("deploy", testPom);
+
+        MockitoAnnotations.initMocks(this);
+
+        ProjectBuildingRequest buildingRequest = mock(ProjectBuildingRequest.class);
+        when(session.getProjectBuildingRequest()).thenReturn(buildingRequest);
+
+        setVariableValueToObject(mojo, "session", session);
+
+        assertNotNull(mojo);
+
+        MavenProject project = (MavenProject) getVariableValueFromObject(mojo, "project");
+        project.setGroupId("org.apache.maven.test");
+        project.setArtifactId("maven-deploy-test");
+        project.setVersion("1.0-SNAPSHOT");
+
+        project.setFile(null);
+        assertNull(project.getFile());
+
+        setVariableValueToObject(mojo, "pluginContext", new ConcurrentHashMap<>());
+        setVariableValueToObject(mojo, "reactorProjects", Collections.singletonList(project));
+
+        try {
+            mojo.execute();
+            fail("Did not throw mojo execution exception");
+        } catch (MojoExecutionException e) {
+            // expected, message should include artifactId
+            assertEquals("The POM for project maven-deploy-test could not be attached", e.getMessage());
         }
     }
 
@@ -568,6 +607,106 @@
         assertEquals(0, getSizeOfExpectedFiles(fileList, expectedFiles));
     }
 
+    public void testNonPomDeployWithAttachedArtifactsOnly() throws Exception {
+        File testPom = new File(
+                getBasedir(), "target/test-classes/unit/basic-deploy-with-attached-artifacts/" + "plugin-config.xml");
+
+        mojo = (DeployMojo) lookupMojo("deploy", testPom);
+
+        MockitoAnnotations.initMocks(this);
+
+        assertNotNull(mojo);
+
+        ProjectBuildingRequest buildingRequest = mock(ProjectBuildingRequest.class);
+        when(session.getProjectBuildingRequest()).thenReturn(buildingRequest);
+
+        MavenProject project = (MavenProject) getVariableValueFromObject(mojo, "project");
+        project.setGroupId("org.apache.maven.test");
+        project.setArtifactId("maven-deploy-test");
+        project.setVersion("1.0-SNAPSHOT");
+
+        setVariableValueToObject(mojo, "pluginContext", new ConcurrentHashMap<>());
+        setVariableValueToObject(mojo, "reactorProjects", Collections.singletonList(project));
+
+        artifact = (DeployArtifactStub) project.getArtifact();
+        artifact.setFile(null);
+
+        try {
+            mojo.execute();
+            fail("Did not throw mojo execution exception");
+        } catch (MojoExecutionException e) {
+            // expected, message should include artifactId
+            assertEquals(
+                    "The packaging plugin for project maven-deploy-test did not assign a main file to the project "
+                            + "but it has attachments. Change packaging to 'pom'.",
+                    e.getMessage());
+        }
+    }
+
+    @Ignore("SCP is not part of Maven3 distribution. Aether handles transport extensions.")
+    public void _testBasicDeployWithScpAsProtocol() throws Exception {
+        String originalUserHome = System.getProperty("user.home");
+
+        // FIX THE DAMN user.home BEFORE YOU DELETE IT!!!
+        File altHome = new File(getBasedir(), "target/ssh-user-home");
+        altHome.mkdirs();
+
+        System.out.println("Testing user.home value for .ssh dir: " + altHome.getCanonicalPath());
+
+        Properties props = System.getProperties();
+        props.setProperty("user.home", altHome.getCanonicalPath());
+
+        System.setProperties(props);
+
+        File testPom = new File(getBasedir(), "target/test-classes/unit/basic-deploy-scp/plugin-config.xml");
+
+        mojo = (DeployMojo) lookupMojo("deploy", testPom);
+
+        assertNotNull(mojo);
+
+        RepositorySystem repositorySystem = mock(RepositorySystem.class);
+
+        setVariableValueToObject(mojo, "repositorySystem", repositorySystem);
+
+        File file = new File(
+                getBasedir(),
+                "target/test-classes/unit/basic-deploy-scp/target/" + "deploy-test-file-1.0-SNAPSHOT.jar");
+
+        assertTrue(file.exists());
+
+        MavenProject project = (MavenProject) getVariableValueFromObject(mojo, "project");
+
+        setVariableValueToObject(mojo, "pluginContext", new ConcurrentHashMap<>());
+        setVariableValueToObject(mojo, "reactorProjects", Collections.singletonList(project));
+
+        artifact = (DeployArtifactStub) project.getArtifact();
+
+        artifact.setFile(file);
+
+        String altUserHome = System.getProperty("user.home");
+
+        if (altUserHome.equals(originalUserHome)) {
+            // this is *very* bad!
+            throw new IllegalStateException(
+                    "Setting 'user.home' system property to alternate value did NOT work. Aborting test.");
+        }
+
+        File sshFile = new File(altUserHome, ".ssh");
+
+        System.out.println("Testing .ssh dir: " + sshFile.getCanonicalPath());
+
+        // delete first the .ssh folder if existing before executing the mojo
+        if (sshFile.exists()) {
+            FileUtils.deleteDirectory(sshFile);
+        }
+
+        mojo.execute();
+
+        assertTrue(sshFile.exists());
+
+        FileUtils.deleteDirectory(sshFile);
+    }
+
     public void testLegacyAltDeploymentRepositoryWithDefaultLayout() throws Exception {
         DeployMojo mojo = new DeployMojo();