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

org.apache.myfaces.plugins.jsdoc.JSDocJarMojo Maven / Gradle / Ivy

/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 * 
 *  http://www.apache.org/licenses/LICENSE-2.0
 * 
 *  Unless required by applicable law or agreed to in writing,
 *  software distributed under the License is distributed on an
 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations
 *  under the License.
 */
package org.apache.myfaces.plugins.jsdoc;

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.project.MavenProjectHelper;
import org.apache.maven.reporting.MavenReportException;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.archiver.jar.JarArchiver;
import org.codehaus.plexus.archiver.jar.ManifestException;

/**
 * @author  Werner Punz
 *          Leonardo Uribe
 * @version 1.0.0
 *          

* A simple jsdoc plugin which should cover our documentation needs * Note this plugin is a simplified tailored derivate from *

* http://www.abiss.gr some code stems from there. *

* since we use jsdoc for now and are not in the reporting part * a simple plugin suffices. * @goal jar * @phase package */ public class JSDocJarMojo extends AbstractJSDocMojo { /** Includes all generated Javascript doc files */ private static final String[] DEFAULT_INCLUDES = new String[] { "**/**" }; /** * Excludes none */ private static final String[] DEFAULT_EXCLUDES = new String[] {}; // ---------------------------------------------------------------------- // Mojo components // ---------------------------------------------------------------------- /** * Used for attaching the artifact in the project. * * @component */ private MavenProjectHelper projectHelper; /** * The Jar archiver. * * @component role="org.codehaus.plexus.archiver.Archiver" roleHint="jar" * @since 2.5 */ private JarArchiver jarArchiver; /** * The archive configuration to use. * See Maven Archiver Reference. * * @parameter * @since 2.5 */ private MavenArchiveConfiguration archive = new MavenArchiveConfiguration(); // ---------------------------------------------------------------------- // Parameters // ---------------------------------------------------------------------- /** * Specifies the directory where the generated jar file will be put. * * @parameter expression="${project.build.directory}" */ private String jarOutputDirectory; /** * Specifies the filename that will be used for the generated jar file. Please note that -jsdoc * or -test-jsdoc will be appended to the file name. * * @parameter expression="${project.build.finalName}" */ private String finalName; /** * Specifies whether to attach the generated artifact to the project helper. *
* * @parameter expression="${attach}" default-value="true" */ private boolean attach; /** * Path to the default MANIFEST file to use. It will be used if * useDefaultManifestFile is set to true. * * @parameter expression="${project.build.outputDirectory}/META-INF/MANIFEST.MF" * @required * @readonly * @since 1.0 */ private File defaultManifestFile; /** * Set this to true to enable the use of the defaultManifestFile. *
* * @parameter default-value="false" * @since 1.0 */ private boolean useDefaultManifestFile; public void execute() throws MojoExecutionException { if ( skip ) { getLog().info( "Skipping jsdoc generation" ); return; } File innerDestDir = new File( getOutputDirectory() ); try { executeReport(Locale.US); if ( innerDestDir.exists() ) { File outputFile = generateArchive( innerDestDir, finalName + "-" + getClassifier() + ".jar" ); if ( !attach ) { getLog().info( "NOT adding jsdoc 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, "jar", getClassifier(), outputFile ); } } } catch ( ArchiverException e ) { getLog().error("ArchiverException: Error while creating archive", e ); } catch ( IOException e ) { getLog().error("IOException: Error while creating archive", e ); } catch ( MavenReportException e ) { getLog().error("MavenReportException: Error while creating archive", e ); } catch ( RuntimeException e ) { getLog().error("RuntimeException: Error while creating archive", e ); } } // ---------------------------------------------------------------------- // Protected methods // ---------------------------------------------------------------------- /** * @return the wanted classifier, i.e. jsdoc or test-jsdoc */ protected String getClassifier() { return "jsdoc"; } // ---------------------------------------------------------------------- // private methods // ---------------------------------------------------------------------- /** * Method that creates the jar file * * @param jsdocFiles 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 if any * @throws IOException if any */ private File generateArchive( File jsdocFiles, String jarFileName ) throws ArchiverException, IOException { File jsdocJar = new File( jarOutputDirectory, jarFileName ); if ( jsdocJar.exists() ) { jsdocJar.delete(); } MavenArchiver archiver = new MavenArchiver(); archiver.setArchiver( jarArchiver ); archiver.setOutputFile( jsdocJar ); File contentDirectory = jsdocFiles; if ( !contentDirectory.exists() ) { getLog().warn( "JAR will be empty - no content was marked for inclusion!" ); } else { archiver.getArchiver().addDirectory( contentDirectory, DEFAULT_INCLUDES, DEFAULT_EXCLUDES ); } List resources = project.getBuild().getResources(); for ( 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( project, archive ); } catch ( ManifestException e ) { throw new ArchiverException( "ManifestException: " + e.getMessage(), e ); } catch ( DependencyResolutionRequiredException e ) { throw new ArchiverException( "DependencyResolutionRequiredException: " + e.getMessage(), e ); } return jsdocJar; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy