Author: olamy
Date: Mon Jun 18 14:49:43 2012
New Revision: 1351368
URL: http://svn.apache.org/viewvc?rev=1351368&view=rev
Log:
[MTOMCAT-60] Multiple-War-Deployment in configuration section.
Added:
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/Webapp.java
(with props)
Modified:
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractRunMojo.java
Modified:
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractRunMojo.java
URL:
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractRunMojo.java?rev=1351368&r1=1351367&r2=1351368&view=diff
==============================================================================
---
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractRunMojo.java
(original)
+++
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractRunMojo.java
Mon Jun 18 14:49:43 2012
@@ -32,7 +32,11 @@ import org.apache.catalina.servlets.Defa
import org.apache.catalina.startup.Catalina;
import org.apache.catalina.startup.Embedded;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
+import
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
@@ -46,6 +50,7 @@ import org.codehaus.plexus.classworlds.r
import org.codehaus.plexus.classworlds.realm.DuplicateRealmException;
import org.codehaus.plexus.util.DirectoryScanner;
import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
@@ -60,9 +65,9 @@ import java.io.IOException;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
-import java.security.Principal;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -78,6 +83,33 @@ import java.util.Set;
public abstract class AbstractRunMojo
extends AbstractI18NTomcat6Mojo
{
+ // ---------------------------------------------------------------------
+ // Mojo Components
+ // ---------------------------------------------------------------------
+
+ /**
+ * Used to look up Artifacts in the remote repository.
+ *
+ * @component
+ */
+ protected org.apache.maven.artifact.factory.ArtifactFactory factory;
+
+ /**
+ * Location of the local repository.
+ *
+ * @parameter expression="${localRepository}"
+ * @readonly
+ * @required
+ */
+ private org.apache.maven.artifact.repository.ArtifactRepository local;
+
+ /**
+ * Used to look up Artifacts in the remote repository.
+ *
+ * @component
+ */
+ protected org.apache.maven.artifact.resolver.ArtifactResolver resolver;
+
// ----------------------------------------------------------------------
// Mojo Parameters
// ----------------------------------------------------------------------
@@ -195,6 +227,7 @@ public abstract class AbstractRunMojo
*
* @parameter expression="${maven.tomcat.addContextWarDependencies}"
default-value="false"
* @since 1.0
+ * @deprecated use additionalWebapps instead
*/
private boolean addContextWarDependencies;
@@ -334,6 +367,12 @@ public abstract class AbstractRunMojo
*/
protected boolean skip;
+ /**
+ * @parameter
+ * @since 2.0
+ */
+ private List<Webapp> additionalWebapps;
+
// ----------------------------------------------------------------------
// Fields
// ----------------------------------------------------------------------
@@ -378,7 +417,8 @@ public abstract class AbstractRunMojo
public void execute()
throws MojoExecutionException, MojoFailureException
{
- if ( skip && !addContextWarDependencies )
+
+ if ( skip && !addContextWarDependencies &&
getAdditionalWebapps().isEmpty() )
{
getLog().info( "skip execution" );
return;
@@ -758,7 +798,7 @@ public abstract class AbstractRunMojo
host.addChild( context );
createStaticContext( container, context, host );
- if ( addContextWarDependencies )
+ if ( addContextWarDependencies ||
!getAdditionalWebapps().isEmpty() )
{
Collection<Context> dependecyContexts =
createDependencyContexts( container );
for ( Context extraContext : dependecyContexts )
@@ -833,6 +873,15 @@ public abstract class AbstractRunMojo
}
}
+ private List<Webapp> getAdditionalWebapps()
+ {
+ if ( additionalWebapps == null )
+ {
+ return Collections.emptyList();
+ }
+ return additionalWebapps;
+ }
+
protected ClassRealm getTomcatClassLoader()
throws MojoExecutionException
{
@@ -927,7 +976,7 @@ public abstract class AbstractRunMojo
* "tomcat".
*
* @param container tomcat
- * @return dependency tomcat contexts of warfiles in scope "tomcat"
+ * @return dependency tomcat contexts of warfiles in scope "tomcat" and
those from additionalWebapps
*/
private Collection<Context> createDependencyContexts( Embedded container )
throws MojoExecutionException
@@ -940,52 +989,63 @@ public abstract class AbstractRunMojo
@SuppressWarnings( "unchecked" ) Set<Artifact> artifacts =
project.getArtifacts();
for ( Artifact artifact : artifacts )
{
-
// Artifact is not yet registered and it has neither test, nor a
// provided scope, not is it optional
if ( "war".equals( artifact.getType() ) && !artifact.isOptional()
&& filter.include( artifact ) )
{
- getLog().info( "Deploy warfile: " + String.valueOf(
artifact.getFile() ) );
- File webapps = new File( configurationDir, "webapps" );
- File artifactWarDir = new File( webapps,
artifact.getArtifactId() );
- if ( !artifactWarDir.exists() )
- {
- //dont extract if exists
- artifactWarDir.mkdir();
- try
- {
- UnArchiver unArchiver = archiverManager.getUnArchiver(
"zip" );
- unArchiver.setSourceFile( artifact.getFile() );
- unArchiver.setDestDirectory( artifactWarDir );
+ addContextFromArtifact( container, contexts, artifact, "/" +
artifact.getArtifactId() );
+ }
+ }
- // Extract the module
- unArchiver.extract();
- }
- catch ( NoSuchArchiverException e )
- {
- getLog().error( e );
- continue;
- }
- catch ( ArchiverException e )
- {
- getLog().error( e );
- continue;
- }
- }
- WebappLoader webappLoader = new WebappLoader(
Thread.currentThread().getContextClassLoader() );
- Context context =
- container.createContext( "/" + artifact.getArtifactId(),
artifactWarDir.getAbsolutePath() );
- context.setLoader( webappLoader );
- File contextFile = getContextFile();
- if ( contextFile != null )
- {
- context.setConfigFile( getContextFile().getAbsolutePath()
);
- }
- contexts.add( context );
+ for ( Webapp additionalWebapp : getAdditionalWebapps() )
+ {
+ addContextFromArtifact( container, contexts, getArtifact(
additionalWebapp ),
+ "/" + additionalWebapp.getContextPath() );
+ }
+ return contexts;
+ }
+
+ private void addContextFromArtifact( Embedded container, List<Context>
contexts, Artifact artifact,
+ String contextPath )
+ throws MojoExecutionException
+ {
+ getLog().info( "Deploy warfile: " + String.valueOf( artifact.getFile()
) + " to contextPath: " + contextPath );
+ File webapps = new File( configurationDir, "webapps" );
+ File artifactWarDir = new File( webapps, artifact.getArtifactId() );
+ if ( !artifactWarDir.exists() )
+ {
+ //dont extract if exists
+ artifactWarDir.mkdir();
+ try
+ {
+ UnArchiver unArchiver = archiverManager.getUnArchiver( "zip" );
+ unArchiver.setSourceFile( artifact.getFile() );
+ unArchiver.setDestDirectory( artifactWarDir );
+
+ // Extract the module
+ unArchiver.extract();
+ }
+ catch ( NoSuchArchiverException e )
+ {
+ getLog().error( e );
+ return;
+ }
+ catch ( ArchiverException e )
+ {
+ getLog().error( e );
+ return;
}
}
- return contexts;
+ WebappLoader webappLoader = new WebappLoader(
Thread.currentThread().getContextClassLoader() );
+ Context context = container.createContext( contextPath,
artifactWarDir.getAbsolutePath() );
+ context.setLoader( webappLoader );
+ File contextFile = getContextFile();
+ if ( contextFile != null )
+ {
+ context.setConfigFile( getContextFile().getAbsolutePath() );
+ }
+ contexts.add( context );
}
@@ -1003,4 +1063,59 @@ public abstract class AbstractRunMojo
host.addChild( staticContext );
}
}
+
+
+ /**
+ * Resolves the Artifact from the remote repository if necessary. If no
version is specified, it will be retrieved
+ * from the dependency list or from the DependencyManagement section of
the pom.
+ *
+ * @param additionalWebapp containing information about artifact from
plugin configuration.
+ * @return Artifact object representing the specified file.
+ * @throws MojoExecutionException with a message if the version can't be
found in DependencyManagement.
+ */
+ protected Artifact getArtifact( Webapp additionalWebapp )
+ throws MojoExecutionException
+ {
+
+ Artifact artifact;
+ VersionRange vr;
+ try
+ {
+ vr = VersionRange.createFromVersionSpec(
additionalWebapp.getVersion() );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ getLog().warn( "fail to create versionRange from version: " +
additionalWebapp.getVersion(), e );
+ vr = VersionRange.createFromVersion( additionalWebapp.getVersion()
);
+ }
+
+ if ( StringUtils.isEmpty( additionalWebapp.getClassifier() ) )
+ {
+ artifact =
+ factory.createDependencyArtifact(
additionalWebapp.getGroupId(), additionalWebapp.getArtifactId(), vr,
+ additionalWebapp.getType(),
null, Artifact.SCOPE_COMPILE );
+ }
+ else
+ {
+ artifact =
+ factory.createDependencyArtifact(
additionalWebapp.getGroupId(), additionalWebapp.getArtifactId(), vr,
+ additionalWebapp.getType(),
additionalWebapp.getClassifier(),
+ Artifact.SCOPE_COMPILE );
+ }
+
+ try
+ {
+ resolver.resolve( artifact,
project.getRemoteArtifactRepositories(), this.local );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new MojoExecutionException( "Unable to resolve artifact.", e
);
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ throw new MojoExecutionException( "Unable to find artifact.", e );
+ }
+
+ return artifact;
+ }
}
Added:
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/Webapp.java
URL:
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/Webapp.java?rev=1351368&view=auto
==============================================================================
---
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/Webapp.java
(added)
+++
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/Webapp.java
Mon Jun 18 14:49:43 2012
@@ -0,0 +1,137 @@
+package org.apache.tomcat.maven.plugin.tomcat6;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Webapp represents information specified in the plugin configuration section
+ * for each webapp.
+ *
+ * @since 2.0
+ */
+public class Webapp
+{
+
+ /**
+ * @parameter
+ * @required
+ */
+ private String groupId;
+
+ /**
+ * @parameter
+ * @required
+ */
+ private String artifactId;
+
+ /**
+ * @parameter
+ */
+ private String version = null;
+
+ /**
+ * @parameter
+ */
+ private String type = "war";
+
+ /**
+ * @parameter
+ */
+ private String classifier;
+
+ /**
+ * @parameter
+ */
+ private String contextPath;
+
+ private Artifact artifact;
+
+ public Webapp()
+ {
+ // default constructor
+ }
+
+ public Webapp( Artifact artifact )
+ {
+ this.setArtifact( artifact );
+ this.setGroupId( artifact.getGroupId() );
+ this.setArtifactId( artifact.getArtifactId() );
+ this.setVersion( artifact.getVersion() );
+ this.setClassifier( artifact.getClassifier() );
+ this.setType( artifact.getType() );
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public void setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
+
+ public void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ public String getType()
+ {
+ return type;
+ }
+
+ public void setType( String type )
+ {
+ this.type = type;
+ }
+
+ public String getClassifier()
+ {
+ return classifier;
+ }
+
+ public void setClassifier( String classifier )
+ {
+ this.classifier = classifier;
+ }
+
+ public String getContextPath()
+ {
+ if ( StringUtils.isEmpty( contextPath ) )
+ {
+ return this.artifactId;
+ }
+ return contextPath;
+ }
+
+ public void setContextPath( String contextPath )
+ {
+ this.contextPath = contextPath;
+ }
+
+ public Artifact getArtifact()
+ {
+ return artifact;
+ }
+
+ public void setArtifact( Artifact artifact )
+ {
+ this.artifact = artifact;
+ }
+}
Propchange:
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/Webapp.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/Webapp.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]