All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scala_maven.ScalaDocJarMojo Maven / Gradle / Ivy

/*
 * This is free and unencumbered software released into the public domain.
 * See UNLICENSE.
 */
package scala_maven;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import org.apache.maven.archiver.MavenArchiveConfiguration;
import org.apache.maven.archiver.MavenArchiver;
import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.apache.maven.model.Resource;
import org.apache.maven.plugin.MojoExecutionException;
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.MavenProjectHelper;
import org.apache.maven.reporting.MavenReportException;
import org.codehaus.plexus.archiver.Archiver;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.archiver.jar.JarArchiver;
import org.codehaus.plexus.archiver.jar.ManifestException;

/** Creates a jar of the non-aggregated scaladoc and attaches it to the project for distribution. */
@Mojo(
    name = "doc-jar",
    defaultPhase = LifecyclePhase.PACKAGE,
    requiresDependencyResolution = ResolutionScope.COMPILE)
public class ScalaDocJarMojo extends ScalaDocMojo {

  private static final String[] DEFAULT_INCLUDES = new String[] {"**/**"};
  private static final String[] DEFAULT_EXCLUDES = new String[] {};
  /** The Jar archiver. */
  @Component(role = Archiver.class, hint = "jar")
  private JarArchiver jarArchiver;

  /** Used for attaching the artifact in the project. */
  @Component private MavenProjectHelper projectHelper;

  /**
   * Specifies the filename that will be used for the generated jar file. Please note that 
   * -javadoc or -test-javadoc will be appended to the file name.
   */
  @Parameter(property = "project.build.finalName")
  private String finalName;

  /** Specifies whether to attach the generated artifact to the project helper. 
*/ @Parameter(property = "attach", defaultValue = "true") private boolean attach; /** Specifies the classifier of the generated artifact. */ @Parameter(property = "classifier", defaultValue = "javadoc") private String classifier; /** Specifies whether to skip generating scaladoc. */ @Parameter(property = "skip", defaultValue = "false") private boolean skip; /** Specifies the directory where the generated jar file will be put. */ @Parameter(property = "project.build.directory") private String jarOutputDirectory; /** * The archive configuration to use. See Maven Archiver Reference. */ @Parameter private MavenArchiveConfiguration archive = new MavenArchiveConfiguration(); /** * Path to the default MANIFEST file to use. It will be used if useDefaultManifestFile * is set to true. */ @Parameter( defaultValue = "${project.build.outputDirectory}/META-INF/MANIFEST.MF", required = true, readonly = true) private File defaultManifestFile; /** * Set this to true to enable the use of the defaultManifestFile.
*/ @Parameter(defaultValue = "false") private boolean useDefaultManifestFile; /** * Specifies if the build will fail if there are errors during javadoc execution or not. * * @since 2.5 */ @Parameter(property = "maven.javadoc.failOnError", defaultValue = "true") private boolean failOnError; @Override public void doExecute() throws Exception { if (skip) { getLog().info("Skipping javadoc generation"); return; } try { generate(null, Locale.getDefault()); if (reportOutputDirectory.exists()) { final File outputFile = generateArchive(reportOutputDirectory, finalName + "-" + getClassifier() + ".jar"); if (!attach) { getLog().info("NOT adding javadoc to attached artifacts list."); } else { // TODO: these introduced dependencies on the project are going to become // problematic - can we export it // through metadata instead? projectHelper.attachArtifact(project, "javadoc", getClassifier(), outputFile); } } } catch (final ArchiverException e) { failOnError("ArchiverException: Error while creating archive", e); } catch (final IOException e) { failOnError("IOException: Error while creating archive", e); } catch (final MavenReportException e) { failOnError("MavenReportException: Error while creating archive", e); } catch (final RuntimeException e) { failOnError("RuntimeException: Error while creating archive", e); } } /** * Method that creates the jar file * * @param javadocFiles the directory where the generated jar file will be put * @param jarFileName the filename of the generated jar file * @return a File object that contains the generated jar file * @throws ArchiverException * @throws IOException */ private File generateArchive(File javadocFiles, String jarFileName) throws ArchiverException, IOException { final File javadocJar = new File(jarOutputDirectory, jarFileName); if (javadocJar.exists()) { javadocJar.delete(); } final MavenArchiver archiver = new MavenArchiver(); archiver.setArchiver(jarArchiver); archiver.setOutputFile(javadocJar); if (!javadocFiles.exists()) { getLog().warn("JAR will be empty - no content was marked for inclusion!"); } else { archiver.getArchiver().addDirectory(javadocFiles, DEFAULT_INCLUDES, DEFAULT_EXCLUDES); } final List resources = project.getBuild().getResources(); for (final Resource r : resources) { if (r.getDirectory().endsWith("maven-shared-archive-resources")) { archiver.getArchiver().addDirectory(new File(r.getDirectory())); } } if (useDefaultManifestFile && defaultManifestFile.exists() && archive.getManifestFile() == null) { getLog() .info( "Adding existing MANIFEST to archive. Found under: " + defaultManifestFile.getPath()); archive.setManifestFile(defaultManifestFile); } try { // we don't want Maven stuff archive.setAddMavenDescriptor(false); archiver.createArchive(session, project, archive); } catch (final ManifestException e) { throw new ArchiverException("ManifestException: " + e.getMessage(), e); } catch (final DependencyResolutionRequiredException e) { throw new ArchiverException("DependencyResolutionRequiredException: " + e.getMessage(), e); } return javadocJar; } private String getClassifier() { return classifier; } private void failOnError(String prefix, Exception e) throws MojoExecutionException { if (failOnError) { if (e instanceof RuntimeException) { throw (RuntimeException) e; } throw new MojoExecutionException(prefix + ": " + e.getMessage(), e); } getLog().error(prefix + ": " + e.getMessage(), e); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy