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

org.apache.maven.plugins.clean.CleanMojo Maven / Gradle / Ivy

Go to download

The Maven Clean Plugin is a plugin that removes files generated at build-time in a project's directory.

There is a newer version: 4.0.0-beta-1
Show newest version
package org.apache.maven.plugins.clean;

/*
 * 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.
 */

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;

import java.io.File;
import java.io.IOException;

/**
 * Goal which cleans the build.
 * 

* This attempts to clean a project's working directory of the files that were generated at build-time. By default, it * discovers and deletes the directories configured in project.build.directory, * project.build.outputDirectory, project.build.testOutputDirectory, and * project.reporting.outputDirectory. *

*

* Files outside the default may also be included in the deletion by configuring the filesets tag. *

* * @author Emmanuel Venisse * @version $Id$ * @see org.apache.maven.plugins.clean.Fileset * @since 2.0 */ @Mojo( name = "clean", threadSafe = true ) public class CleanMojo extends AbstractMojo { /** * This is where build results go. */ @Parameter( defaultValue = "${project.build.directory}", readonly = true, required = true ) private File directory; /** * This is where compiled classes go. */ @Parameter( defaultValue = "${project.build.outputDirectory}", readonly = true, required = true ) private File outputDirectory; /** * This is where compiled test classes go. */ @Parameter( defaultValue = "${project.build.testOutputDirectory}", readonly = true, required = true ) private File testOutputDirectory; /** * This is where the site plugin generates its pages. * * @since 2.1.1 */ @Parameter( defaultValue = "${project.build.outputDirectory}", readonly = true, required = true ) private File reportDirectory; /** * Sets whether the plugin runs in verbose mode. As of plugin version 2.3, the default value is derived from Maven's * global debug flag (compare command line switch -X).
* Starting with 3.0.0 the property has been renamed from clean.verbose to * maven.clean.verbose. * * @since 2.1 */ @Parameter( property = "maven.clean.verbose" ) private Boolean verbose; /** * The list of file sets to delete, in addition to the default directories. For example: * *
     * <filesets>
     *   <fileset>
     *     <directory>src/main/generated</directory>
     *     <followSymlinks>false</followSymlinks>
     *     <useDefaultExcludes>true</useDefaultExcludes>
     *     <includes>
     *       <include>*.java</include>
     *     </includes>
     *     <excludes>
     *       <exclude>Template*</exclude>
     *     </excludes>
     *   </fileset>
     * </filesets>
     * 
* * @since 2.1 */ @Parameter private Fileset[] filesets; /** * Sets whether the plugin should follow symbolic links while deleting files from the default output directories of * the project. Not following symlinks requires more IO operations and heap memory, regardless whether symlinks are * actually present. So projects with a huge output directory that knowingly does not contain symlinks can improve * performance by setting this parameter to true.
* Starting with 3.0.0 the property has been renamed from clean.followSymLinks to * maven.clean.followSymLinks. * * @since 2.1 */ @Parameter( property = "maven.clean.followSymLinks", defaultValue = "false" ) private boolean followSymLinks; /** * Disables the plugin execution.
* Starting with 3.0.0 the property has been renamed from clean.skip to * maven.clean.skip. * * @since 2.2 */ @Parameter( property = "maven.clean.skip", defaultValue = "false" ) private boolean skip; /** * Indicates whether the build will continue even if there are clean errors. * * @since 2.2 */ @Parameter( property = "maven.clean.failOnError", defaultValue = "true" ) private boolean failOnError; /** * Indicates whether the plugin should undertake additional attempts (after a short delay) to delete a file if the * first attempt failed. This is meant to help deleting files that are temporarily locked by third-party tools like * virus scanners or search indexing. * * @since 2.4.2 */ @Parameter( property = "maven.clean.retryOnError", defaultValue = "true" ) private boolean retryOnError; /** * Disables the deletion of the default output directories configured for a project. If set to true, * only the files/directories selected via the parameter {@link #filesets} will be deleted.
* Starting with 3.0.0 the property has been renamed from clean.excludeDefaultDirectories to * maven.clean.excludeDefaultDirectories. * * @since 2.3 */ @Parameter( property = "maven.clean.excludeDefaultDirectories", defaultValue = "false" ) private boolean excludeDefaultDirectories; /** * Deletes file-sets in the following project build directory order: (source) directory, output directory, test * directory, report directory, and then the additional file-sets. * * @throws MojoExecutionException When a directory failed to get deleted. * @see org.apache.maven.plugin.Mojo#execute() */ public void execute() throws MojoExecutionException { if ( skip ) { getLog().info( "Clean is skipped." ); return; } Cleaner cleaner = new Cleaner( getLog(), isVerbose() ); try { for ( File directoryItem : getDirectories() ) { if ( directoryItem != null ) { cleaner.delete( directoryItem, null, followSymLinks, failOnError, retryOnError ); } } if ( filesets != null ) { for ( Fileset fileset : filesets ) { if ( fileset.getDirectory() == null ) { throw new MojoExecutionException( "Missing base directory for " + fileset ); } GlobSelector selector = new GlobSelector( fileset.getIncludes(), fileset.getExcludes(), fileset.isUseDefaultExcludes() ); cleaner.delete( fileset.getDirectory(), selector, fileset.isFollowSymlinks(), failOnError, retryOnError ); } } } catch ( IOException e ) { throw new MojoExecutionException( "Failed to clean project: " + e.getMessage(), e ); } } /** * Indicates whether verbose output is enabled. * * @return true if verbose output is enabled, false otherwise. */ private boolean isVerbose() { return ( verbose != null ) ? verbose : getLog().isDebugEnabled(); } /** * Gets the directories to clean (if any). The returned array may contain null entries. * * @return The directories to clean or an empty array if none, never null. */ private File[] getDirectories() { File[] directories; if ( excludeDefaultDirectories ) { directories = new File[0]; } else { directories = new File[] { directory, outputDirectory, testOutputDirectory, reportDirectory }; } return directories; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy