PR: MNG-148

Submitted by: Stephane Nicoll
Reviewed by:  Brett Porter, Emmanuel Venisse
Implementation of an EAR plugin

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@171221 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Leslie Porter 2005-05-21 15:09:22 +00:00
parent a3661b40fe
commit 8a69c2bdc0
13 changed files with 993 additions and 0 deletions

View File

@ -0,0 +1,29 @@
<model>
<parent>
<artifactId>maven-plugin-parent</artifactId>
<groupId>org.apache.maven.plugins</groupId>
<version>2.0-alpha-2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-ear-plugin</artifactId>
<packaging>maven-plugin</packaging>
<name>Maven Ear plugin</name>
<version>2.0-alpha-1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-archiver</artifactId>
<version>2.0-alpha-2</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.0-alpha-2</version>
</dependency>
<dependency>
<groupId>plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>1.0-alpha-3</version>
</dependency>
</dependencies>
</model>

View File

@ -0,0 +1,103 @@
package org.apache.maven.plugin.ear;
/*
* 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 org.apache.maven.artifact.Artifact;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.ear.module.EarModule;
import org.apache.maven.plugin.ear.module.EarModuleFactory;
import org.apache.maven.project.MavenProject;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
/**
* A base class for EAR-processing related tasks.
*
* @author <a href="stephane.nicoll@gmail.com">Stephane Nicoll</a>
* @version $Id $
*/
public abstract class AbstractEarMojo
extends AbstractMojo
{
public static final String APPLICATION_XML_URI = "META-INF/application.xml";
/**
* The maven project.
*
* @parameter expression="${project}"
* @required
* @readonly
* @description "the maven project to use"
*/
private MavenProject project;
/**
* Directory that resources are copied to during the build.
*
* @parameter expression="${project.build.directory}/${project.build.finalName}"
* @required
*/
private String earDirectory;
private List modules;
private File buildDir;
protected List getModules()
{
if ( modules == null )
{
// Gather modules and copy them
modules = new ArrayList();
Set artifacts = project.getArtifacts();
for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
{
Artifact artifact = (Artifact) iter.next();
if ( !Artifact.SCOPE_TEST.equals( artifact.getScope() ) )
{
EarModule module = EarModuleFactory.newEarModule( artifact );
modules.add( module );
}
}
}
return modules;
}
protected File getBuildDir()
{
if ( buildDir == null )
{
buildDir = new File( earDirectory );
}
return buildDir;
}
protected MavenProject getProject()
{
return project;
}
protected String getEarDirectory()
{
return earDirectory;
}
}

View File

@ -0,0 +1,108 @@
package org.apache.maven.plugin.ear;
import org.apache.maven.plugin.ear.module.EarModule;
import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter;
import org.codehaus.plexus.util.xml.XMLWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;
import java.util.List;
/*
* 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.
*/
/**
* An <tt>XmlWriter</tt> based implementation used to generate an
* <tt>application.xml</tt> file
*
* @author Stephane Nicoll <stephane.nicoll@gmail.com>
* @author $Author: sni $ (last edit)
* @version $Id$
*/
public final class ApplicationXmlWriter
{
private final String version;
public ApplicationXmlWriter( String version )
{
this.version = version;
}
public void write( File destinationFile, List earModules, String displayName, String description )
throws EarPluginException
{
FileWriter w;
try
{
w = new FileWriter( destinationFile );
}
catch ( IOException ex )
{
throw new EarPluginException( "Exception while opening file[" + destinationFile.getAbsolutePath() + "]",
ex );
}
// @todo Add DTD or XSchema reference based on version attribute
XMLWriter writer = new PrettyPrintXMLWriter( w );
writer.startElement( "application" );
if ( displayName != null )
{
writer.startElement( "display-name" );
writer.writeText( displayName );
writer.endElement();
}
if ( description != null )
{
writer.startElement( "description" );
writer.writeText( description );
writer.endElement();
}
Iterator i = earModules.iterator();
while ( i.hasNext() )
{
EarModule module = (EarModule) i.next();
module.appendModule( writer, version );
}
writer.endElement();
close( w );
}
private void close( Writer closeable )
{
if ( closeable == null )
{
return;
}
try
{
closeable.close();
}
catch ( Exception e )
{
// TODO: warn
}
}
}

View File

@ -0,0 +1,164 @@
package org.apache.maven.plugin.ear;
/*
* 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 org.apache.maven.archiver.MavenArchiveConfiguration;
import org.apache.maven.archiver.MavenArchiver;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.ear.module.EarModule;
import org.codehaus.plexus.util.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* The Ear Mojo.
*
* @author <a href="stephane.nicoll@gmail.com">Stephane Nicoll</a>
* @version $Id $
* @goal ear
* @phase package
* @requiresDependencyResolution test
* @description builds an ear
*/
public class EarMojo
extends AbstractEarMojo
{
/**
* Single directory for extra files to include in the EAR.
*
* @parameter expression="${basedir}/src/application"
* @required
*/
private String earSourceDirectory;
/**
* The location of the manifest file to be used within the ear file.
*
* @parameter expression="${basedir}/src/application/META-INF/MANIFEST.MF"
* @TODO handle this field
*/
private String manifestLocation;
/**
* The location of the application.xml file to be used within the ear file.
*
* @parameter expression="${basedir}/src/application/META-INF/application.xml"
*/
private String applicationXmlLocation;
/**
* The directory for the generated EAR.
*
* @parameter expression="${project.build.directory}"
* @required
*/
private String outputDirectory;
/**
* The name of the EAR file to generate.
*
* @parameter alias="earName" expression="${project.build.finalName}"
* @required
* @readonly
*/
private String finalName;
/**
* The list of excluded dependencies with format groupId:artifactId[:type].
*
* @parameter
* @TODO handle this field
*/
private List excludedDependencies = new ArrayList();
/**
* The maven archiver to use.
*
* @parameter
*/
private MavenArchiveConfiguration archive = new MavenArchiveConfiguration();
public void execute()
throws MojoExecutionException
{
getLog().debug( " ======= EarMojo settings =======" );
getLog().debug( "earSourceDirectory[" + earSourceDirectory + "]" );
getLog().debug( "manifestLocation[" + manifestLocation + "]" );
getLog().debug( "applicationXmlLocation[" + applicationXmlLocation + "]" );
getLog().debug( "earDirectory[" + getEarDirectory() + "]" );
getLog().debug( "outputDirectory[" + outputDirectory + "]" );
getLog().debug( "finalName[" + finalName + "]" );
getLog().debug( "excludedDependencies[" + excludedDependencies + "]" );
// Copy modules
try
{
for ( Iterator iter = getModules().iterator(); iter.hasNext(); )
{
EarModule module = (EarModule) iter.next();
getLog().info( "Copying artifact[" + module.getArtifact().getGroupId() + ", " +
module.getArtifact().getId() + ", " + module.getArtifact().getType() + "]" );
FileUtils.copyFileToDirectory( module.getArtifact().getFile(), getBuildDir() );
}
}
catch ( IOException e )
{
throw new MojoExecutionException( "Error copying EAR modules", e );
}
// Copy source files
try
{
File earSourceDir = new File( earSourceDirectory );
if ( earSourceDir.exists() )
{
getLog().info( "Copy ear resources to " + getBuildDir().getAbsolutePath() );
FileUtils.copyDirectoryStructure( earSourceDir, getBuildDir() );
}
}
catch ( IOException e )
{
throw new MojoExecutionException( "Error copying EAR resources", e );
}
// Check if deployment descriptor is there
File ddFile = new File( getBuildDir(), APPLICATION_XML_URI );
if ( !ddFile.exists() )
{
throw new MojoExecutionException( "Deployment descriptor: " + ddFile.getAbsolutePath() + " does not exist." );
}
try
{
File earFile = new File( outputDirectory, finalName + ".ear" );
MavenArchiver archiver = new MavenArchiver();
archiver.setOutputFile( earFile );
archiver.getArchiver().addDirectory( getBuildDir() );
archiver.createArchive( getProject(), archive );
}
catch ( Exception e )
{
throw new MojoExecutionException( "Error assembling EAR", e );
}
}
}

View File

@ -0,0 +1,48 @@
package org.apache.maven.plugin.ear;
/*
* 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.
*/
/**
* The base exception of the EAR plugin.
*
* @author Stephane Nicoll <stephane.nicoll@gmail.com>
* @author $Author: sni $ (last edit)
* @version $Revision: 1.2 $
*/
public class EarPluginException
extends Exception
{
public EarPluginException()
{
}
public EarPluginException( String message )
{
super( message );
}
public EarPluginException( Throwable cause )
{
super( cause );
}
public EarPluginException( String message, Throwable cause )
{
super( message, cause );
}
}

View File

@ -0,0 +1,137 @@
package org.apache.maven.plugin.ear;
/*
* 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 org.apache.maven.plugin.MojoExecutionException;
import org.codehaus.plexus.util.FileUtils;
import java.io.File;
import java.io.IOException;
/**
* A <tt>Mojo</tt> used to build the <tt>application.xml</tt> file
* if necessary.
*
* @author <a href="stephane.nicoll@gmail.com">Stephane Nicoll</a>
* @version $Id $
* @goal generate-application-xml
* @phase process-resources
* @requiresDependencyResolution test
* @description generates the application.xml deployment descriptor
*/
public class GenerateApplicationXmlMojo
extends AbstractEarMojo
{
public static final String VERSION_1_3 = "1.3";
public static final String VERSION_1_4 = "1.4";
public static final String UTF_8 = "UTF-8";
/**
* Inserts the doctype header depending on the specified version.
*
* @parameter expression="${maven.ear.appxml.version}"
*/
private String version = VERSION_1_3;
/**
* Display name of the application to be used when <tt>application.xml</tt>
* file is autogenerated.
*
* @parameter expression="${project.artifactId}"
*/
private String displayName = null;
/**
* The description in generated <tt>application.xml</tt>.
*
* @parameter
*/
private String description = null;
/**
* Character encoding for the auto-generated <tt>application.xml</tt> file.
*
* @parameter
* @TODO handle this field
*/
private String encoding = UTF_8;
/**
* Directory where the <tt>application.xml</tt> file will be auto-generated.
*
* @parameter expression="${project.build.directory}"
*/
private String generatedDescriptorLocation;
public void execute()
throws MojoExecutionException
{
getLog().debug( " ======= GenerateApplicationXmlMojo settings =======" );
getLog().debug( "version[" + version + "]" );
getLog().debug( "displayName[" + displayName + "]" );
getLog().debug( "description[" + description + "]" );
getLog().debug( "encoding[" + encoding + "]" );
getLog().debug( "generatedDescriptorLocation[" + generatedDescriptorLocation + "]" );
// Generate deployment descriptor
try
{
getLog().info( "Generating application.xml" );
generateDeploymentDescriptor();
FileUtils.copyFileToDirectory( new File( generatedDescriptorLocation, "application.xml" ),
new File( getBuildDir(), "META-INF" ) );
}
catch ( IOException e )
{
throw new MojoExecutionException( "Failed to generate application.xml", e );
}
}
/**
* Generates the deployment descriptor if necessary.
*
* @throws IOException
*/
protected void generateDeploymentDescriptor()
throws IOException
{
File outputDir = new File( generatedDescriptorLocation );
if ( !outputDir.exists() )
{
outputDir.mkdir();
}
File descriptor = new File( outputDir, "application.xml" );
if ( !descriptor.exists() )
{
descriptor.createNewFile();
}
ApplicationXmlWriter writer = new ApplicationXmlWriter( version );
try
{
writer.write( descriptor, getModules(), displayName, description );
}
catch ( EarPluginException e )
{
throw new IOException( "Unable to generate application.xml[" + e.getMessage() + "]" );
}
}
}

View File

@ -0,0 +1,53 @@
package org.apache.maven.plugin.ear.module;
/*
* 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 org.apache.maven.artifact.Artifact;
/**
* A base implementation of an {@link EarModule}.
*
* @author Stephane Nicoll <stephane.nicoll@gmail.com>
* @author $Author: sni $ (last edit)
* @version $Revision: 1.2 $
*/
public abstract class AbstractEarModule
implements EarModule
{
protected static final String MODULE_ELEMENT = "module";
private final String uri;
private final Artifact artifact;
AbstractEarModule( String uri, Artifact a )
{
this.uri = uri;
this.artifact = a;
}
public Artifact getArtifact()
{
return artifact;
}
public String getUri()
{
return uri;
}
}

View File

@ -0,0 +1,54 @@
package org.apache.maven.plugin.ear.module;
/*
* 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 org.apache.maven.artifact.Artifact;
import org.codehaus.plexus.util.xml.XMLWriter;
/**
* The ear module interface.
*
* @author Stephane Nicoll <stephane.nicoll@gmail.com>
* @author $Author: sni $ (last edit)
* @version $Revision: 1.2 $
*/
public interface EarModule
{
/**
* Returns the <tt>Artifact</tt> representing this module.
*
* @return the <tt>Artifact</tt>
*/
public Artifact getArtifact();
/**
* Returns the <tt>URI</tt> fo the Ear module.
*
* @return the <tt>URI</tt>
*/
public String getUri();
/**
* Appends the <tt>XML</tt> representation of this module.
*
* @param writer the writer to use
* @param version the version of the <tt>application.xml</tt> file
*/
public void appendModule( XMLWriter writer, String version );
}

View File

@ -0,0 +1,92 @@
package org.apache.maven.plugin.ear.module;
/*
* 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 org.apache.maven.artifact.Artifact;
/**
* Builds an {@link EarModule} based on an <tt>Artifact</tt>.
*
* @author Stephane Nicoll <stephane.nicoll@gmail.com>
* @author $Author: sni $ (last edit)
* @version $Revision: 1.2 $
*/
public final class EarModuleFactory
{
/**
* Creates a new {@link EarModule} based on the specified <tt>Artifact</tt>.
*
* @param artifact the artifact
* @return an ear module for this artifact
*/
public static final EarModule newEarModule( Artifact artifact )
{
if ( "jar".equals( artifact.getType() ) )
{
return new JavaModule( getUri( artifact ), artifact );
}
else if ( "ejb".equals( artifact.getType() ) )
{
return new EjbModule( getUri( artifact ), artifact );
}
else if ( "rar".equals( artifact.getType() ) )
{
return new RarModule( getUri( artifact ), artifact );
}
else if ( "war".equals( artifact.getType() ) )
{
return new WebModule( getUri( artifact ), artifact, getContextRoot( artifact ) );
}
else
{
throw new IllegalStateException( "Could not handle artifact type[" + artifact.getType() + "]" );
}
}
/**
* Returns the URI for the specifed <tt>Artifact</tt>.
*
* @param artifact the artifact
* @return the URI of this artifact in the EAR file
* @TODO handle custom URI - for now it returns the file name
*/
private static String getUri( Artifact artifact )
{
return artifact.getFile().getName();
}
/**
* Returns the context root for the specifed war <tt>Artifact</tt>.
*
* @param artifact the artifact
* @return the context root of the artifact
* @TODO handle custom context root - for now it returns the artifact Id
*/
private static String getContextRoot( Artifact artifact )
{
if ( artifact.getType().equals( "war" ) )
{
return "/" + artifact.getArtifactId();
}
else
{
throw new IllegalStateException(
"Could not get context-root for an artifact with type[" + artifact.getType() + "]" );
}
}
}

View File

@ -0,0 +1,47 @@
package org.apache.maven.plugin.ear.module;
/*
* 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 org.apache.maven.artifact.Artifact;
import org.codehaus.plexus.util.xml.XMLWriter;
/**
* The {@link EarModule} implementation for an EJB module.
*
* @author Stephane Nicoll <stephane.nicoll@gmail.com>
* @author $Author: sni $ (last edit)
* @version $Revision: 1.2 $
*/
public class EjbModule
extends AbstractEarModule
{
protected static final String EJB_MODULE = "ejb";
EjbModule( String uri, Artifact a )
{
super( uri, a );
}
public void appendModule( XMLWriter writer, String version )
{
writer.startElement( MODULE_ELEMENT );
writer.startElement( EJB_MODULE );
writer.writeText( getUri() );
writer.endElement();
writer.endElement();
}
}

View File

@ -0,0 +1,47 @@
package org.apache.maven.plugin.ear.module;
/*
* 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 org.apache.maven.artifact.Artifact;
import org.codehaus.plexus.util.xml.XMLWriter;
/**
* The {@link EarModule} implementation for a J2EE client module.
*
* @author Stephane Nicoll <stephane.nicoll@gmail.com>
* @author $Author: sni $ (last edit)
* @version $Revision: 1.2 $
*/
public class JavaModule
extends AbstractEarModule
{
protected static final String JAVA_MODULE = "java";
JavaModule( String uri, Artifact a )
{
super( uri, a );
}
public void appendModule( XMLWriter writer, String version )
{
writer.startElement( MODULE_ELEMENT );
writer.startElement( JAVA_MODULE );
writer.writeText( getUri() );
writer.endElement();
writer.endElement();
}
}

View File

@ -0,0 +1,47 @@
package org.apache.maven.plugin.ear.module;
/*
* 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 org.apache.maven.artifact.Artifact;
import org.codehaus.plexus.util.xml.XMLWriter;
/**
* The {@link EarModule} implementation for an J2EE connector module.
*
* @author Stephane Nicoll <stephane.nicoll@gmail.com>
* @author $Author: sni $ (last edit)
* @version $Revision: 1.2 $
*/
public class RarModule
extends AbstractEarModule
{
protected static final String RAR_MODULE = "connector";
RarModule( String uri, Artifact a )
{
super( uri, a );
}
public void appendModule( XMLWriter writer, String version )
{
writer.startElement( MODULE_ELEMENT );
writer.startElement( RAR_MODULE );
writer.writeText( getUri() );
writer.endElement();
writer.endElement();
}
}

View File

@ -0,0 +1,64 @@
package org.apache.maven.plugin.ear.module;
/*
* 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 org.apache.maven.artifact.Artifact;
import org.codehaus.plexus.util.xml.XMLWriter;
/**
* The {@link EarModule} implementation for an Web application module.
*
* @author Stephane Nicoll <stephane.nicoll@gmail.com>
* @author $Author: sni $ (last edit)
* @version $Revision: 1.2 $
*/
public class WebModule
extends AbstractEarModule
{
protected static final String WEB_MODULE = "web";
protected static final String WEB_URI_FIELD = "web-uri";
protected static final String CONTEXT_ROOT_FIELD = "context-root";
private final String contextRoot;
WebModule( String uri, Artifact a, String contextRoot )
{
super( uri, a );
this.contextRoot = contextRoot;
}
public void appendModule( XMLWriter writer, String version )
{
writer.startElement( MODULE_ELEMENT );
writer.startElement( WEB_MODULE );
writer.startElement( WEB_URI_FIELD );
writer.writeText( getUri() );
writer.endElement(); // web-uri
writer.startElement( CONTEXT_ROOT_FIELD );
writer.writeText( getContextRoot() );
writer.endElement(); // context-root
writer.endElement(); // web
writer.endElement(); // module
}
public String getContextRoot()
{
return contextRoot;
}
}