docs: @Override
      public void execute() throws MojoExecutionException, MojoFailureException {
          if (!skip) {
              boolean ansiRestore = Ansi.isEnabled();
              log = new AnsiLogger(getLog(), useColorForLogging(), verbose, !settings.getInteractiveMode(), getLogPrefix());
  
              try {
                  authConfigFactory.setLog(log);
                  imageConfigResolver.setLog(log);
  
                  LogOutputSpecFactory logSpecFactory = new LogOutputSpecFactory(useColor, logStdout, logDate);
  
                  ConfigHelper.validateExternalPropertyActivation(project, images);
  
                  DockerAccess access = null;
                  try {
                      // The 'real' images configuration to use (configured images + externally resolved images)
                      this.minimalApiVersion = initImageConfiguration(getBuildTimestamp());
                      if (isDockerAccessRequired()) {
                          DockerAccessFactory.DockerAccessContext dockerAccessContext = getDockerAccessContext();
                          access = dockerAccessFactory.createDockerAccess(dockerAccessContext);
                      }
                      ServiceHub serviceHub = serviceHubFactory.createServiceHub(project, session, access, log, logSpecFactory);
                      executeInternal(serviceHub);
                  } catch (IOException | ExecException exp) {
                      logException(exp);
                      throw new MojoExecutionException(log.errorMessage(exp.getMessage()), exp);
                  } catch (MojoExecutionException exp) {
                      logException(exp);
                      throw exp;
                  } finally {
                      if (access != null) {
                          access.shutdown();
                      }
                  }
              } finally {
                  Ansi.setEnabled(ansiRestore);
              }
          }
      }