docs: public File createDockerTarArchive(String imageName, final MojoParameters params, final BuildImageConfiguration buildConfig, Logger log, ArchiverCustomizer finalCustomizer)
              throws MojoExecutionException {
  
          final BuildDirs buildDirs = createBuildDirs(imageName, params);
          final AssemblyConfiguration assemblyConfig = buildConfig.getAssemblyConfiguration();
  
          final List<ArchiverCustomizer> archiveCustomizers = new ArrayList<>();
  
          // Build up assembly. In dockerfile mode this must be added explicitly in the Dockerfile with an ADD
          if (hasAssemblyConfiguration(assemblyConfig)) {
              createAssemblyArchive(assemblyConfig, params, buildDirs);
          }
          try {
              if (buildConfig.isDockerFileMode()) {
                  // Use specified docker directory which must include a Dockerfile.
                  final File dockerFile = buildConfig.getAbsoluteDockerFilePath(params);
                  if (!dockerFile.exists()) {
                      throw new MojoExecutionException("Configured Dockerfile \"" +
                                                       buildConfig.getDockerFile() + "\" (resolved to \"" + dockerFile + "\") doesn't exist");
                  }
  
                  FixedStringSearchInterpolator interpolator = DockerFileUtil.createInterpolator(params, buildConfig.getFilter());
                  verifyGivenDockerfile(dockerFile, buildConfig, interpolator, log);
                  interpolateDockerfile(dockerFile, buildDirs, interpolator);
                  // User dedicated Dockerfile from extra directory
                  archiveCustomizers.add(new ArchiverCustomizer() {
                      @Override
                      public TarArchiver customize(TarArchiver archiver) throws IOException {
                          DefaultFileSet fileSet = DefaultFileSet.fileSet(buildConfig.getAbsoluteContextDirPath(params));
                          addDockerIncludesExcludesIfPresent(fileSet, params);
                          // Exclude non-interpolated dockerfile from source tree
                          // Interpolated Dockerfile is already added as it was created into the output directory when
                          // using dir dir mode
                          excludeDockerfile(fileSet, dockerFile);
  
                          // If the content is added as archive, then we need to add the Dockerfile from the builddir
                          // directly to docker.tar (as the output builddir is not picked up in archive mode)
                          if (isArchive(assemblyConfig)) {
                              String name = dockerFile.getName();
                              archiver.addFile(new File(buildDirs.getOutputDirectory(), name), name);
                          }
  
                          archiver.addFileSet(fileSet);
                          return archiver;
                      }
                  });
              } else {
                  // Create custom docker file in output dir
                  DockerFileBuilder builder = createDockerFileBuilder(buildConfig, assemblyConfig);
                  builder.write(buildDirs.getOutputDirectory());
                  // Add own Dockerfile
                  final File dockerFile = new File(buildDirs.getOutputDirectory(), DOCKERFILE_NAME);
                  archiveCustomizers.add(new ArchiverCustomizer() {
                      @Override
                      public TarArchiver customize(TarArchiver archiver) throws IOException {
                          archiver.addFile(dockerFile, DOCKERFILE_NAME);
                          return archiver;
                      }
                  });
              }
  
              // If required make all files in the assembly executable
              if (assemblyConfig != null) {
                  AssemblyConfiguration.PermissionMode mode = assemblyConfig.getPermissions();
                  if (mode == AssemblyConfiguration.PermissionMode.exec ||
                      mode == AssemblyConfiguration.PermissionMode.auto && EnvUtil.isWindows()) {
                      archiveCustomizers.add(new AllFilesExecCustomizer(log));
                  }
              }
  
              if (finalCustomizer != null) {
                  archiveCustomizers.add(finalCustomizer);
              }
  
              return createBuildTarBall(buildDirs, archiveCustomizers, assemblyConfig, buildConfig.getCompression());
  
          } catch (IOException e) {
              throw new MojoExecutionException(String.format("Cannot create %s in %s", DOCKERFILE_NAME, buildDirs.getOutputDirectory()), e);
          }
      }