package org.apache.maven.plugin.eclipse;
/*
* Copyright 2001-2005 The Apache Software Foundation.
*
* Licensed 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 java.io.File;
import java.io.IOException;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.codehaus.plexus.util.FileUtils;
/**
* Deletes the .project, .classpath, .wtpmodules files and .settings folder used by Eclipse.
*
* @goal clean
*/
public class EclipseCleanMojo
extends AbstractMojo
{
/**
* Definition file for Eclipse Web Tools project.
*/
private static final String FILE_DOT_WTPMODULES = ".wtpmodules"; //$NON-NLS-1$
/**
* Classpath definition file for an Eclipse Java project.
*/
private static final String FILE_DOT_CLASSPATH = ".classpath"; //$NON-NLS-1$
/**
* Project definition file for an Eclipse Project.
*/
private static final String FILE_DOT_PROJECT = ".project"; //$NON-NLS-1$
/**
* Web Project definition file for Eclipse Web Tools Project (Release 1.0x).
*/
private static final String DIR_DOT_SETTINGS = ".settings"; //$NON-NLS-1$
/**
* File name where the WTP component settings will be stored - WTP 1.0 name.
*/
private static final String FILE_DOT_COMPONENT = ".settings/.component"; //$NON-NLS-1$
/**
* File name where the WTP component settings will be stored - WTP 1.5 name.
*/
private static final String FILE_DOT_COMPONENT_15 = ".settings/org.eclipse.wst.common.component"; //$NON-NLS-1$
/**
* File name where Eclipse Project's Facet configuration will be stored.
*/
private static final String FILE_FACET_CORE_XML = ".settings/org.eclipse.wst.common.project.facet.core.xml"; //$NON-NLS-1$
/**
* General project preferences.
*/
private static final String FILE_ECLIPSE_JDT_CORE_PREFS = ".settings/org.eclipse.jdt.core.prefs"; //$NON-NLS-1$
/**
* AJDT preferences.
*/
private static final String FILE_AJDT_PREFS = ".settings/org.eclipse.ajdt.ui.prefs"; //$NON-NLS-1$
/**
* Packaging for the current project.
* @parameter expression="${project.packaging}"
* @required
* @readonly
*/
private String packaging;
/**
* The root directory of the project
*
* @parameter expression="${basedir}"
*/
private File basedir;
/**
* Is it an PDE project?
*
* @parameter expression="${eclipse.pde}" default-value="false"
*/
private boolean pde;
/**
* @see org.apache.maven.plugin.AbstractMojo#execute()
*/
public void execute()
throws MojoExecutionException
{
// since the eclipse plugin doesn't generate configuration for POM projects, it should neither delete it
if ( "pom".equals( packaging ) ) //$NON-NLS-1$
{
getLog().info( Messages.getString( "EclipsePlugin.pompackaging" ) ); //$NON-NLS-1$
return;
}
delete( new File( basedir, FILE_DOT_PROJECT ) );
delete( new File( basedir, FILE_DOT_CLASSPATH ) );
delete( new File( basedir, FILE_DOT_WTPMODULES ) );
delete( new File( basedir, FILE_DOT_COMPONENT ) );
delete( new File( basedir, FILE_DOT_COMPONENT_15 ) );
delete( new File( basedir, FILE_FACET_CORE_XML ) );
delete( new File( basedir, FILE_ECLIPSE_JDT_CORE_PREFS ) );
delete( new File( basedir, FILE_AJDT_PREFS ) );
File settingsDir = new File( basedir, DIR_DOT_SETTINGS );
if ( settingsDir.exists() && settingsDir.isDirectory() && settingsDir.list().length == 0 )
{
delete( settingsDir );
}
cleanExtras();
}
protected void cleanExtras()
throws MojoExecutionException
{
// extension point.
}
/**
* Delete a file, handling log messages and exceptions
*
* @param f File to be deleted
* @throws MojoExecutionException only if a file exists and can't be deleted
*/
protected void delete( File f )
throws MojoExecutionException
{
if ( f.isDirectory() )
{
getLog().info( Messages.getString( "EclipseCleanMojo.deletingDirectory", f.getName() ) ); //$NON-NLS-1$
}
else
{
getLog().info( Messages.getString( "EclipseCleanMojo.deletingFile", f.getName() ) ); //$NON-NLS-1$
}
if ( f.exists() )
{
if ( !f.delete() )
{
try
{
FileUtils.forceDelete( f );
}
catch ( IOException e )
{
throw new MojoExecutionException( Messages.getString( "EclipseCleanMojo.failedtodelete", //$NON-NLS-1$
new Object[] {
f.getName(),
f.getAbsolutePath() } ) );
}
}
}
else
{
getLog().debug( Messages.getString( "EclipseCleanMojo.nofilefound", f.getName() ) ); //$NON-NLS-1$
}
}
/**
* Getter for basedir.
* @return Returns the basedir.
*/
public File getBasedir()
{
return this.basedir;
}
/**
* Setter for basedir.
* @param basedir The basedir to set.
*/
public void setBasedir( File basedir )
{
this.basedir = basedir;
}
}