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/02/24 16:02:53 UTC

[maven-jlink-plugin] branch mvn4 updated: Switch a few core plugins to the new api

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-jlink-plugin.git


The following commit(s) were added to refs/heads/mvn4 by this push:
     new ed073d4  Switch a few core plugins to the new api
ed073d4 is described below

commit ed073d4025629ac8e0c88ca15f9ab1b84a01e363
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Thu Feb 24 17:00:56 2022 +0100

    Switch a few core plugins to the new api
---
 pom.xml                                            |   4 +-
 .../maven/plugins/jlink/AbstractJLinkExecutor.java |  15 +--
 .../maven/plugins/jlink/AbstractJLinkMojo.java     |  39 ++++---
 .../jlink/AbstractJLinkToolchainExecutor.java      |  17 ++-
 .../apache/maven/plugins/jlink/JLinkExecutor.java  |   8 +-
 .../org/apache/maven/plugins/jlink/JLinkMojo.java  | 117 +++++++++------------
 .../apache/maven/plugins/jlink/JLinkExecutor.java  |  15 ++-
 .../maven/plugins/jlink/AbstractJLinkMojoTest.java |   3 -
 8 files changed, 104 insertions(+), 114 deletions(-)

diff --git a/pom.xml b/pom.xml
index 838a4b4..19490f2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -87,14 +87,14 @@
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
-      <artifactId>maven-core</artifactId>
+      <artifactId>maven-core-api</artifactId>
       <version>${mavenVersion}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-archiver</artifactId>
-      <version>3.5.1</version>
+      <version>3.5.3-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
diff --git a/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkExecutor.java b/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkExecutor.java
index 3213736..564f91f 100644
--- a/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkExecutor.java
+++ b/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkExecutor.java
@@ -19,8 +19,6 @@ package org.apache.maven.plugins.jlink;
  * under the License.
  */
 
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.logging.Log;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -28,28 +26,31 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
 
+import org.apache.maven.api.plugin.MojoException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 abstract class AbstractJLinkExecutor
 {
     protected static final String JMODS = "jmods";
 
-    private final Log log;
+    private final Logger log = LoggerFactory.getLogger( getClass() );
 
     private final List<String> modulesToAdd = new ArrayList<>();
     private final List<String> modulePaths = new ArrayList<>();
 
-    AbstractJLinkExecutor( Log log )
+    AbstractJLinkExecutor()
     {
-        this.log = log;
     }
 
-    protected Log getLog()
+    protected Logger getLog()
     {
         return this.log;
     }
 
     public abstract Optional<File> getJmodsFolder( /* nullable */ File sourceJdkModules );
 
-    public abstract int executeJlink( List<String> jlinkArgs ) throws MojoExecutionException;
+    public abstract int executeJlink( List<String> jlinkArgs ) throws MojoException;
 
     public void addAllModules( Collection<String> modulesToAdd )
     {
diff --git a/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkMojo.java b/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkMojo.java
index 1ed65a0..33f5d0c 100644
--- a/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkMojo.java
+++ b/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkMojo.java
@@ -26,19 +26,21 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugins.annotations.Component;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.toolchain.Toolchain;
-import org.apache.maven.toolchain.ToolchainManager;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.Session;
+import org.apache.maven.api.Toolchain;
+import org.apache.maven.api.plugin.annotations.Component;
+import org.apache.maven.api.plugin.annotations.Parameter;
+import org.apache.maven.api.services.ToolchainManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 
 /**
  * @author Karl Heinz Marbaise <a href="mailto:khmarbaise@apache.org">khmarbaise@apache.org</a>
  */
 public abstract class AbstractJLinkMojo
-    extends AbstractMojo
+    implements org.apache.maven.api.plugin.Mojo
 {
     /**
      * <p>
@@ -51,14 +53,21 @@ public abstract class AbstractJLinkMojo
     private Map<String, String> jdkToolchain;
 
     @Parameter( defaultValue = "${project}", readonly = true, required = true )
-    private MavenProject project;
+    private Project project;
 
     @Parameter( defaultValue = "${session}", readonly = true, required = true )
-    private MavenSession session;
+    private Session session;
 
     @Component
     private ToolchainManager toolchainManager;
 
+    private Logger logger = LoggerFactory.getLogger( getClass() );
+
+    protected Logger getLog()
+    {
+        return logger;
+    }
+
     /**
      * Overload this to produce a zip with another classifier, for example a jlink-zip.
      * @return get the classifier.
@@ -67,7 +76,7 @@ public abstract class AbstractJLinkMojo
 
     protected JLinkExecutor getJlinkExecutor()
     {
-        return new JLinkExecutor( getToolchain().orElse( null ), getLog() );
+        return new JLinkExecutor( getToolchain().orElse( null ) );
     }
 
     protected Optional<Toolchain> getToolchain()
@@ -80,7 +89,7 @@ public abstract class AbstractJLinkMojo
             try
             {
                 Method getToolchainsMethod = toolchainManager.getClass().getMethod( "getToolchains",
-                        MavenSession.class, String.class, Map.class );
+                        Session.class, String.class, Map.class );
 
                 @SuppressWarnings( "unchecked" )
                 List<Toolchain> tcs = (List<Toolchain>) getToolchainsMethod.invoke( toolchainManager, getSession(),
@@ -100,18 +109,18 @@ public abstract class AbstractJLinkMojo
         if ( tc == null )
         {
             // TODO: Check if we should make the type configurable?
-            tc = toolchainManager.getToolchainFromBuildContext( "jdk", getSession() );
+            tc = toolchainManager.getToolchainFromBuildContext( getSession(), "jdk" );
         }
 
         return Optional.ofNullable( tc );
     }
 
-    protected MavenProject getProject()
+    protected Project getProject()
     {
         return project;
     }
 
-    protected MavenSession getSession()
+    protected Session getSession()
     {
         return session;
     }
diff --git a/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkToolchainExecutor.java b/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkToolchainExecutor.java
index 3ebce69..7151018 100644
--- a/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkToolchainExecutor.java
+++ b/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkToolchainExecutor.java
@@ -21,12 +21,11 @@ package org.apache.maven.plugins.jlink;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.SystemUtils;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.api.Toolchain;
+import org.apache.maven.api.plugin.MojoException;
 import org.apache.maven.shared.utils.cli.CommandLineException;
 import org.apache.maven.shared.utils.cli.CommandLineUtils;
 import org.apache.maven.shared.utils.cli.Commandline;
-import org.apache.maven.toolchain.Toolchain;
 
 import java.io.File;
 import java.util.List;
@@ -37,9 +36,9 @@ abstract class AbstractJLinkToolchainExecutor extends AbstractJLinkExecutor
 {
     private final Toolchain toolchain;
 
-    AbstractJLinkToolchainExecutor( Toolchain toolchain, Log log )
+    AbstractJLinkToolchainExecutor( Toolchain toolchain )
     {
-        super( log );
+        super();
         this.toolchain = toolchain;
     }
 
@@ -54,7 +53,7 @@ abstract class AbstractJLinkToolchainExecutor extends AbstractJLinkExecutor
      * @return the exit code ({@code 0} on success).
      */
     @Override
-    public int executeJlink( List<String> jlinkArgs ) throws MojoExecutionException
+    public int executeJlink( List<String> jlinkArgs ) throws MojoException
     {
         File jlinkExecutable = getJlinkExecutable();
         getLog().info( "Toolchain in maven-jlink-plugin: jlink [ " + jlinkExecutable + " ]" );
@@ -144,7 +143,7 @@ abstract class AbstractJLinkToolchainExecutor extends AbstractJLinkExecutor
     }
 
     private int executeCommand( Commandline cmd )
-            throws MojoExecutionException
+            throws MojoException
     {
         if ( getLog().isDebugEnabled() )
         {
@@ -182,7 +181,7 @@ abstract class AbstractJLinkToolchainExecutor extends AbstractJLinkExecutor
                 msg.append( '\n' );
                 msg.append( "Command line was: " ).append( cmd ).append( '\n' ).append( '\n' );
 
-                throw new MojoExecutionException( msg.toString() );
+                throw new MojoException( msg.toString() );
             }
 
             if ( StringUtils.isNotEmpty( output ) )
@@ -198,7 +197,7 @@ abstract class AbstractJLinkToolchainExecutor extends AbstractJLinkExecutor
         }
         catch ( CommandLineException e )
         {
-            throw new MojoExecutionException( "Unable to execute jlink command: " + e.getMessage(), e );
+            throw new MojoException( "Unable to execute jlink command: " + e.getMessage(), e );
         }
     }
 }
diff --git a/src/main/java/org/apache/maven/plugins/jlink/JLinkExecutor.java b/src/main/java/org/apache/maven/plugins/jlink/JLinkExecutor.java
index 7482adb..4e6f346 100644
--- a/src/main/java/org/apache/maven/plugins/jlink/JLinkExecutor.java
+++ b/src/main/java/org/apache/maven/plugins/jlink/JLinkExecutor.java
@@ -19,8 +19,8 @@ package org.apache.maven.plugins.jlink;
  * under the License.
  */
 
-import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.toolchain.Toolchain;
+
+import org.apache.maven.api.Toolchain;
 
 /**
  * JDK 8-only Jlink executor.
@@ -29,9 +29,9 @@ import org.apache.maven.toolchain.Toolchain;
  */
 class JLinkExecutor extends AbstractJLinkToolchainExecutor
 {
-    JLinkExecutor( Toolchain toolchain, Log log )
+    JLinkExecutor( Toolchain toolchain )
     {
-        super( toolchain, log );
+        super( toolchain );
     }
 
 }
diff --git a/src/main/java/org/apache/maven/plugins/jlink/JLinkMojo.java b/src/main/java/org/apache/maven/plugins/jlink/JLinkMojo.java
index b0b273b..0eeb825 100644
--- a/src/main/java/org/apache/maven/plugins/jlink/JLinkMojo.java
+++ b/src/main/java/org/apache/maven/plugins/jlink/JLinkMojo.java
@@ -21,6 +21,7 @@ package org.apache.maven.plugins.jlink;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -29,22 +30,21 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.NoSuchElementException;
+import java.util.Objects;
 import java.util.Optional;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugins.annotations.Component;
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.plugins.annotations.ResolutionScope;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.MavenProjectHelper;
-import org.apache.maven.toolchain.Toolchain;
-import org.apache.maven.toolchain.ToolchainPrivate;
-import org.apache.maven.toolchain.java.DefaultJavaToolChain;
+import org.apache.maven.api.Artifact;
+import org.apache.maven.api.JavaToolchain;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.Toolchain;
+import org.apache.maven.api.plugin.MojoException;
+import org.apache.maven.api.plugin.annotations.Component;
+import org.apache.maven.api.plugin.annotations.LifecyclePhase;
+import org.apache.maven.api.plugin.annotations.Mojo;
+import org.apache.maven.api.plugin.annotations.Parameter;
+import org.apache.maven.api.plugin.annotations.ResolutionScope;
+import org.apache.maven.api.services.ProjectManager;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
 import org.codehaus.plexus.archiver.zip.ZipArchiver;
@@ -312,10 +312,10 @@ public class JLinkMojo
      * Convenience interface for plugins to add or replace artifacts and resources on projects.
      */
     @Component
-    private MavenProjectHelper projectHelper;
+    private ProjectManager projectManager;
 
     @Override
-    public void execute() throws MojoExecutionException, MojoFailureException
+    public void execute() throws MojoException
     {
         failIfParametersAreNotInTheirValidValueRanges();
 
@@ -360,40 +360,36 @@ public class JLinkMojo
         }
         catch ( IllegalStateException e )
         {
-            throw new MojoFailureException( "Unable to find jlink command: " + e.getMessage(), e );
+            throw new MojoException( "Unable to find jlink command: " + e.getMessage(), e );
         }
 
-        File createZipArchiveFromImage = createZipArchiveFromImage( buildDirectory, outputDirectoryImage );
+        Path createZipArchiveFromImage = createZipArchiveFromImage( buildDirectory, outputDirectoryImage );
 
-        if ( hasClassifier() )
+        if ( !hasClassifier() && projectHasAlreadySetAnArtifact() )
         {
-            projectHelper.attachArtifact( getProject(), "jlink", getClassifier(), createZipArchiveFromImage );
-        }
-        else
-        {
-            if ( projectHasAlreadySetAnArtifact() )
-            {
-                throw new MojoExecutionException( "You have to use a classifier "
-                        + "to attach supplemental artifacts to the project instead of replacing them." );
-            }
-            getProject().getArtifact().setFile( createZipArchiveFromImage );
+            throw new MojoException( "You have to use a classifier "
+                    + "to attach supplemental artifacts to the project instead of replacing them." );
         }
+        projectManager.attachArtifact( getProject(), "jlink", getClassifier(), createZipArchiveFromImage );
     }
 
-    private List<File> getCompileClasspathElements( MavenProject project )
+    private List<File> getCompileClasspathElements( Project project )
     {
-        List<File> list = new ArrayList<>( project.getArtifacts().size() + 1 );
+        List<Artifact> artifacts
+            = projectManager.getResolvedDependencies( project, ProjectManager.ResolutionScope.Runtime );
+
+        List<File> list = new ArrayList<>( artifacts.size() + 1 );
 
-        for ( Artifact a : project.getArtifacts() )
+        for ( Artifact a : artifacts )
         {
             getLog().debug( "Artifact: " + a.getGroupId() + ":" + a.getArtifactId() + ":" + a.getVersion() );
-            list.add( a.getFile() );
+            list.add( a.getPath().get().toFile() );
         }
         return list;
     }
 
     private Map<String, File> getModulePathElements()
-        throws MojoFailureException
+        throws MojoException
     {
         // For now only allow named modules. Once we can create a graph with ASM we can specify exactly the modules
         // and we can detect if auto modules are used. In that case, MavenProject.setFile() should not be used, so
@@ -409,10 +405,10 @@ public class JLinkMojo
 
             Optional<Toolchain> toolchain = getToolchain();
             if ( toolchain.isPresent()
-                    && toolchain.orElseThrow( NoSuchElementException::new ) instanceof DefaultJavaToolChain )
+                    && toolchain.get() instanceof JavaToolchain )
             {
                 Toolchain toolcahin1 = toolchain.orElseThrow( NoSuchElementException::new );
-                request.setJdkHome( new File( ( (DefaultJavaToolChain) toolcahin1 ).getJavaHome() ) );
+                request.setJdkHome( new File( ( (JavaToolchain) toolcahin1 ).getJavaHome() ) );
             }
 
             ResolvePathsResult<File> resolvePathsResult = locationManager.resolvePaths( request );
@@ -425,7 +421,7 @@ public class JLinkMojo
                     String message = "The given dependency " + entry.getKey()
                         + " does not have a module-info.java file. So it can't be linked.";
                     getLog().error( message );
-                    throw new MojoFailureException( message );
+                    throw new MojoException( message );
                 }
 
                 // Don't warn for automatic modules, let the jlink tool do that
@@ -454,7 +450,7 @@ public class JLinkMojo
                         String message = "The given project " + entry.getKey()
                             + " does not contain a module-info.java file. So it can't be linked.";
                         getLog().error( message );
-                        throw new MojoFailureException( message );
+                        throw new MojoException( message );
                     }
                     if ( modulepathElements.containsKey( descriptor.name() ) )
                     {
@@ -468,7 +464,7 @@ public class JLinkMojo
         catch ( IOException e )
         {
             getLog().error( e.getMessage() );
-            throw new MojoFailureException( e.getMessage() );
+            throw new MojoException( e.getMessage() );
         }
 
         return modulepathElements;
@@ -481,14 +477,9 @@ public class JLinkMojo
 
     private boolean projectHasAlreadySetAnArtifact( )
     {
-        if ( getProject().getArtifact().getFile() != null )
-        {
-            return getProject().getArtifact().getFile().isFile();
-        }
-        else
-        {
-            return false;
-        }
+        return projectManager.getAttachedArtifacts( getProject() ).stream()
+                .anyMatch( a -> Objects.equals( a.getGroupId(), getProject().getGroupId() )
+                        && Objects.equals( a.getArtifactId(), getProject().getArtifactId() ) );
     }
 
     /**
@@ -505,8 +496,8 @@ public class JLinkMojo
         return result;
     }
 
-    private File createZipArchiveFromImage( File outputDirectory, File outputDirectoryImage )
-        throws MojoExecutionException
+    private Path createZipArchiveFromImage( File outputDirectory, File outputDirectoryImage )
+        throws MojoException
     {
         zipArchiver.addDirectory( outputDirectoryImage );
 
@@ -520,21 +511,21 @@ public class JLinkMojo
         catch ( ArchiverException | IOException e )
         {
             getLog().error( e.getMessage(), e );
-            throw new MojoExecutionException( e.getMessage(), e );
+            throw new MojoException( e.getMessage(), e );
         }
 
-        return resultArchive;
+        return resultArchive.toPath();
 
     }
 
     private void failIfParametersAreNotInTheirValidValueRanges()
-        throws MojoFailureException
+        throws MojoException
     {
         if ( compress != null && ( compress < 0 || compress > 2 ) )
         {
             String message = "The given compress parameters " + compress + " is not in the valid value range from 0..2";
             getLog().error( message );
-            throw new MojoFailureException( message );
+            throw new MojoException( message );
         }
 
         if ( endian != null && ( !"big".equals( endian ) && !"little".equals( endian ) ) )
@@ -542,7 +533,7 @@ public class JLinkMojo
             String message = "The given endian parameter " + endian
                     + " does not contain one of the following values: 'little' or 'big'.";
             getLog().error( message );
-            throw new MojoFailureException( message );
+            throw new MojoException( message );
         }
 
         if ( addOptions != null && !addOptions.isEmpty() )
@@ -551,7 +542,7 @@ public class JLinkMojo
         }
     }
 
-    private void requireJdk14() throws MojoFailureException
+    private void requireJdk14() throws MojoException
     {
         // needs JDK 14+
         Optional<Toolchain> optToolchain = getToolchain();
@@ -559,21 +550,15 @@ public class JLinkMojo
 
         if ( optToolchain.isPresent() )
         {
-            Toolchain toolchain = optToolchain.orElseThrow( NoSuchElementException::new );
-            if ( !( toolchain instanceof ToolchainPrivate ) )
-            {
-                getLog().warn( "Unable to check toolchain java version." );
-                return;
-            }
-            ToolchainPrivate toolchainPrivate = (ToolchainPrivate) toolchain;
-            if ( !toolchainPrivate.matchesRequirements( singletonMap( "jdk", "14" ) ) )
+            Toolchain toolchain = optToolchain.get();
+            if ( !toolchain.matchesRequirements( singletonMap( "jdk", "14" ) ) )
             {
-                throw new MojoFailureException( java14reqMsg );
+                throw new MojoException( java14reqMsg );
             }
         }
         else if ( !JavaVersion.JAVA_VERSION.isAtLeast( "14" ) )
         {
-            throw new MojoFailureException( java14reqMsg );
+            throw new MojoException( java14reqMsg );
         }
     }
 
@@ -597,7 +582,7 @@ public class JLinkMojo
     }
 
     private void ifOutputDirectoryExistsDelteIt()
-        throws MojoExecutionException
+        throws MojoException
     {
         if ( outputDirectoryImage.exists() )
         {
@@ -611,7 +596,7 @@ public class JLinkMojo
             catch ( IOException e )
             {
                 getLog().error( "IOException", e );
-                throw new MojoExecutionException( "Failure during deletion of " + outputDirectoryImage.getAbsolutePath()
+                throw new MojoException( "Failure during deletion of " + outputDirectoryImage.getAbsolutePath()
                     + " occured." );
             }
         }
diff --git a/src/main/java9/org/apache/maven/plugins/jlink/JLinkExecutor.java b/src/main/java9/org/apache/maven/plugins/jlink/JLinkExecutor.java
index 2b825ed..470b388 100644
--- a/src/main/java9/org/apache/maven/plugins/jlink/JLinkExecutor.java
+++ b/src/main/java9/org/apache/maven/plugins/jlink/JLinkExecutor.java
@@ -20,9 +20,8 @@
 package org.apache.maven.plugins.jlink;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.toolchain.Toolchain;
+import org.apache.maven.api.Toolchain;
+import org.apache.maven.api.plugin.MojoException;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -43,9 +42,9 @@ class JLinkExecutor extends AbstractJLinkToolchainExecutor
 {
     private final ToolProvider toolProvider;
 
-    JLinkExecutor( Toolchain toolchain, Log log ) throws IOException
+    JLinkExecutor( Toolchain toolchain ) throws IOException
     {
-        super( toolchain, log );
+        super( toolchain );
         this.toolProvider = getJLinkExecutable();
     }
 
@@ -57,7 +56,7 @@ class JLinkExecutor extends AbstractJLinkToolchainExecutor
     }
 
     @Override
-    public int executeJlink( List<String> jlinkArgs ) throws MojoExecutionException
+    public int executeJlink( List<String> jlinkArgs ) throws MojoException
     {
         if (getToolchain().isPresent())
         {
@@ -105,7 +104,7 @@ class JLinkExecutor extends AbstractJLinkToolchainExecutor
                 msg.append( "Command line was: " ).append( this.toolProvider.name() ).append( ' ' ).append(
                         jlinkArgs ).append( '\n' ).append( '\n' );
 
-                throw new MojoExecutionException( msg.toString() );
+                throw new MojoException( msg.toString() );
             }
 
             if ( StringUtils.isNotEmpty( output ) )
@@ -121,7 +120,7 @@ class JLinkExecutor extends AbstractJLinkToolchainExecutor
         }
         catch ( IOException e )
         {
-            throw new MojoExecutionException( "Unable to execute jlink command: " + e.getMessage(), e );
+            throw new MojoException( "Unable to execute jlink command: " + e.getMessage(), e );
         }
     }
 
diff --git a/src/test/java/org/apache/maven/plugins/jlink/AbstractJLinkMojoTest.java b/src/test/java/org/apache/maven/plugins/jlink/AbstractJLinkMojoTest.java
index 1aef05a..81cc3ee 100644
--- a/src/test/java/org/apache/maven/plugins/jlink/AbstractJLinkMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/jlink/AbstractJLinkMojoTest.java
@@ -21,13 +21,11 @@ package org.apache.maven.plugins.jlink;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 
 import java.io.File;
 import java.util.Arrays;
 import java.util.Collections;
 
-import org.apache.maven.plugin.logging.Log;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
@@ -44,7 +42,6 @@ public class AbstractJLinkMojoTest
     public void before()
     {
         this.mojoMock = mock( AbstractJLinkMojo.class, Mockito.CALLS_REAL_METHODS );
-        when( mojoMock.getLog() ).thenReturn( mock( Log.class ) );
     }
 
     @Test