Author: olamy
Date: Tue Oct 11 20:16:43 2011
New Revision: 1182063
URL: http://svn.apache.org/viewvc?rev=1182063&view=rev
Log:
[MTOMCAT-100] support war overlay to add war external dependencies in tomcat
run.
Added:
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculatorRequest.java
(with props)
Modified:
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/pom.xml
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculator.java
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java
tomcat/maven-plugin/trunk/pom.xml
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/AbstractRunMojo.java
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/RunMojo.java
tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java
tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/RunMojo.java
Modified: tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/pom.xml
URL:
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/pom.xml?rev=1182063&r1=1182062&r2=1182063&view=diff
==============================================================================
--- tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/pom.xml (original)
+++ tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/pom.xml Tue Oct 11
20:16:43 2011
@@ -41,6 +41,26 @@
</dependency>
<dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-archiver</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-archiver</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>catalina</artifactId>
<version>6.0.33</version>
@@ -58,6 +78,12 @@
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+
</dependencies>
<build>
Modified:
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculator.java
URL:
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculator.java?rev=1182063&r1=1182062&r2=1182063&view=diff
==============================================================================
---
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculator.java
(original)
+++
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculator.java
Tue Oct 11 20:16:43 2011
@@ -32,6 +32,6 @@ import java.util.Set;
*/
public interface ClassLoaderEntriesCalculator
{
- List<String> calculateClassPathEntries( MavenProject mavenProject,
Set<Artifact> dependencies, Log log )
+ List<String> calculateClassPathEntries(
ClassLoaderEntriesCalculatorRequest classLoaderEntriesCalculatorRequest )
throws TomcatRunException;
}
Added:
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculatorRequest.java
URL:
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculatorRequest.java?rev=1182063&view=auto
==============================================================================
---
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculatorRequest.java
(added)
+++
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculatorRequest.java
Tue Oct 11 20:16:43 2011
@@ -0,0 +1,84 @@
+package org.apache.tomcat.maven.common.run;
+/*
+ * 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.artifact.Artifact;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+
+import java.util.Set;
+
+/**
+ * @author Olivier Lamy
+ * @since 2.0
+ */
+public class ClassLoaderEntriesCalculatorRequest
+{
+ private MavenProject mavenProject;
+
+ private Set<Artifact> dependencies;
+
+ private Log log;
+
+ private boolean addWarDependenciesInClassloader;
+
+ public MavenProject getMavenProject()
+ {
+ return mavenProject;
+ }
+
+ public ClassLoaderEntriesCalculatorRequest setMavenProject(MavenProject
mavenProject)
+ {
+ this.mavenProject = mavenProject;
+ return this;
+ }
+
+ public Set<Artifact> getDependencies()
+ {
+ return dependencies;
+ }
+
+ public ClassLoaderEntriesCalculatorRequest setDependencies(Set<Artifact>
dependencies)
+ {
+ this.dependencies = dependencies;
+ return this;
+ }
+
+ public Log getLog()
+ {
+ return log;
+ }
+
+ public ClassLoaderEntriesCalculatorRequest setLog(Log log)
+ {
+ this.log = log;
+ return this;
+ }
+
+ public boolean isAddWarDependenciesInClassloader()
+ {
+ return addWarDependenciesInClassloader;
+ }
+
+ public ClassLoaderEntriesCalculatorRequest
setAddWarDependenciesInClassloader(boolean addWarDependenciesInClassloader)
+ {
+ this.addWarDependenciesInClassloader = addWarDependenciesInClassloader;
+ return this;
+ }
+}
Propchange:
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculatorRequest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculatorRequest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified:
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java
URL:
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java?rev=1182063&r1=1182062&r2=1182063&view=diff
==============================================================================
---
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java
(original)
+++
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java
Tue Oct 11 20:16:43 2011
@@ -19,14 +19,25 @@ package org.apache.tomcat.maven.common.r
* under the License.
*/
+import com.google.common.io.Files;
+import org.apache.commons.io.FileUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.archiver.ArchiverException;
+import org.codehaus.plexus.archiver.UnArchiver;
+import org.codehaus.plexus.archiver.manager.ArchiverManager;
+import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.components.io.fileselectors.FileInfo;
+import org.codehaus.plexus.components.io.fileselectors.FileSelector;
import org.codehaus.plexus.util.StringUtils;
import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -40,7 +51,12 @@ import java.util.Set;
public class DefaultClassLoaderEntriesCalculator
implements ClassLoaderEntriesCalculator
{
- public List<String> calculateClassPathEntries( MavenProject project,
Set<Artifact> dependencies, Log log )
+
+ @Requirement
+ private ArchiverManager archiverManager;
+
+
+ public List<String> calculateClassPathEntries(
ClassLoaderEntriesCalculatorRequest request )
throws TomcatRunException
{
List<String> classLoaderEntries = new ArrayList<String>();
@@ -48,7 +64,8 @@ public class DefaultClassLoaderEntriesCa
try
{
- @SuppressWarnings( "unchecked" ) List<String> classPathElements =
project.getCompileClasspathElements();
+ @SuppressWarnings( "unchecked" ) List<String> classPathElements =
+ request.getMavenProject().getCompileClasspathElements();
if ( classPathElements != null )
{
for ( String classPathElement : classPathElements )
@@ -56,7 +73,7 @@ public class DefaultClassLoaderEntriesCa
File classPathElementFile = new File( classPathElement );
if ( classPathElementFile.exists() &&
classPathElementFile.isDirectory() )
{
- log.debug( "adding classPathElementFile " +
classPathElementFile.toURI().toString() );
+ request.getLog().debug("adding classPathElementFile "
+ classPathElementFile.toURI().toString());
classLoaderEntries.add(
classPathElementFile.toURI().toString() );
}
}
@@ -68,31 +85,86 @@ public class DefaultClassLoaderEntriesCa
}
// add artifacts to loader
- if ( dependencies != null )
+ if ( request.getDependencies() != null )
{
- for ( Artifact artifact : dependencies )
+ for ( Artifact artifact : request.getDependencies() )
{
String scope = artifact.getScope();
// skip provided and test scoped artifacts
if ( !Artifact.SCOPE_PROVIDED.equals( scope ) &&
!Artifact.SCOPE_TEST.equals( scope ) )
{
- log.debug(
+ request.getLog().debug(
"add dependency to webapploader " +
artifact.getGroupId() + ":" + artifact.getArtifactId() + ":"
- + artifact.getVersion() + ":" +
artifact.getScope() );
- if ( !isInProjectReferences( artifact, project ) )
+ + artifact.getVersion() + ":" +
artifact.getScope());
+ if ( !isInProjectReferences( artifact,
request.getMavenProject() ) )
{
classLoaderEntries.add(
artifact.getFile().toURI().toString() );
}
else
{
- log.debug( "skip adding artifact " +
artifact.getArtifactId() + " as it's in reactors" );
+ request.getLog().debug(
+ "skip adding artifact " + artifact.getArtifactId()
+ " as it's in reactors");
+ }
+ }
+ // in case of war dependency we must add /WEB-INF/lib/*.jar in
entries and WEB-INF/classes
+ if ("war".equals(artifact.getType()) &&
request.isAddWarDependenciesInClassloader() )
+ {
+ File tmpDir = null;
+ try
+ {
+ tmpDir = Files.createTempDir();
+ File warFile = artifact.getFile();
+ UnArchiver unArchiver = archiverManager.getUnArchiver(
"jar" );
+ unArchiver.setSourceFile( warFile );
+ unArchiver.setDestDirectory(tmpDir);
+ unArchiver.extract();
+ File libsDirectory = new File( tmpDir, "WEB-INF/lib" );
+ if (libsDirectory.exists())
+ {
+ String[] jars = libsDirectory.list( new
FilenameFilter()
+ {
+ public boolean accept(File file, String s)
+ {
+ return s.endsWith( ".jar" );
+ }
+ } );
+ for (String jar : jars)
+ {
+ classLoaderEntries.add( new File( jar
).toURI().toString() );
+ }
+ }
+ File classesDirectory = new File( tmpDir,
"WEB-INF/classes" );
+ if (classesDirectory.exists())
+ {
+ classLoaderEntries.add(
classesDirectory.toURI().toString() );
+ }
+ } catch ( NoSuchArchiverException e)
+ {
+ throw new TomcatRunException(e.getMessage(), e);
+ } catch ( ArchiverException e) {
+ request.getLog().error(
+ "fail to extract war file " + artifact.getFile() +
", reason:" + e.getMessage(), e);
+ throw new TomcatRunException(e.getMessage(), e);
+ } finally {
+ deleteDirectory( tmpDir, request.getLog() );
}
}
}
}
return classLoaderEntries;
}
+
+ private void deleteDirectory(File directory, Log log) throws
TomcatRunException
+ {
+ try
+ {
+ FileUtils.deleteDirectory(directory);
+ } catch ( IOException e) {
+ log.error( "fail to delete directory file " + directory + ",
reason:" + e.getMessage(), e );
+ throw new TomcatRunException(e.getMessage(), e);
+ }
+ }
protected boolean isInProjectReferences( Artifact artifact, MavenProject
project )
{
Modified: tomcat/maven-plugin/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/pom.xml?rev=1182063&r1=1182062&r2=1182063&view=diff
==============================================================================
--- tomcat/maven-plugin/trunk/pom.xml (original)
+++ tomcat/maven-plugin/trunk/pom.xml Tue Oct 11 20:16:43 2011
@@ -253,7 +253,12 @@
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-archiver</artifactId>
- <version>2.2</version>
+ <version>2.4.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-archiver</artifactId>
+ <version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
@@ -266,10 +271,25 @@
<version>1.3</version>
</dependency>
<dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.6</version>
+ </dependency>
+ <dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-classworlds</artifactId>
<version>2.2.2</version>
</dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>10.0.1</version>
+ </dependency>
<!-- Test Dependencies -->
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=1182063&r1=1182062&r2=1182063&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
Tue Oct 11 20:16:43 2011
@@ -883,11 +883,6 @@ public abstract class AbstractRunMojo
// Extract the module
unArchiver.extract( );
}
- catch ( IOException e )
- {
- getLog( ).error( e );
- continue;
- }
catch ( NoSuchArchiverException e )
{
getLog( ).error( e );
Modified:
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/RunMojo.java
URL:
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/RunMojo.java?rev=1182063&r1=1182062&r2=1182063&view=diff
==============================================================================
---
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/RunMojo.java
(original)
+++
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/RunMojo.java
Tue Oct 11 20:16:43 2011
@@ -25,6 +25,7 @@ import org.apache.catalina.startup.Embed
import org.apache.maven.artifact.Artifact;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.tomcat.maven.common.run.ClassLoaderEntriesCalculator;
+import org.apache.tomcat.maven.common.run.ClassLoaderEntriesCalculatorRequest;
import org.apache.tomcat.maven.common.run.TomcatRunException;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.xml.Xpp3Dom;
@@ -138,9 +139,10 @@ public class RunMojo
try
{
-
+ ClassLoaderEntriesCalculatorRequest request =
+ new ClassLoaderEntriesCalculatorRequest().setDependencies(
dependencies ).setLog( getLog() ).setMavenProject( project );
List<String> classLoaderEntries =
-
classLoaderEntriesCalculator.calculateClassPathEntries(project, dependencies,
getLog());
+
classLoaderEntriesCalculator.calculateClassPathEntries(request);
if ( classLoaderEntries != null )
{
Modified:
tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java
URL:
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java?rev=1182063&r1=1182062&r2=1182063&view=diff
==============================================================================
---
tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java
(original)
+++
tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/AbstractRunMojo.java
Tue Oct 11 20:16:43 2011
@@ -905,11 +905,6 @@ public abstract class AbstractRunMojo
// Extract the module
unArchiver.extract();
}
- catch ( IOException e )
- {
- getLog().error(e);
- continue;
- }
catch ( NoSuchArchiverException e )
{
getLog().error(e);
Modified:
tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/RunMojo.java
URL:
http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/RunMojo.java?rev=1182063&r1=1182062&r2=1182063&view=diff
==============================================================================
---
tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/RunMojo.java
(original)
+++
tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat7/run/RunMojo.java
Tue Oct 11 20:16:43 2011
@@ -22,6 +22,7 @@ import org.apache.catalina.loader.Webapp
import org.apache.maven.artifact.Artifact;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.tomcat.maven.common.run.ClassLoaderEntriesCalculator;
+import org.apache.tomcat.maven.common.run.ClassLoaderEntriesCalculatorRequest;
import org.apache.tomcat.maven.common.run.TomcatRunException;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.xml.Xpp3Dom;
@@ -97,6 +98,14 @@ public class RunMojo
*/
private ClassLoaderEntriesCalculator classLoaderEntriesCalculator;
+ /**
+ * FIXME javadoc
+ *
+ * @parameter expression="${maven.tomcat.addWarDependenciesInClassloader}"
default-value="false"
+ * @since 2.0
+ */
+ private boolean addWarDependenciesInClassloader;
+
private File temporaryContextFile = null;
/**
@@ -199,9 +208,12 @@ public class RunMojo
try
{
-
+ ClassLoaderEntriesCalculatorRequest request =
+ new ClassLoaderEntriesCalculatorRequest().setDependencies(
dependencies )
+ .setLog( getLog() ).setMavenProject( project )
+ .setAddWarDependenciesInClassloader(
addWarDependenciesInClassloader );
List<String> classLoaderEntries =
-
classLoaderEntriesCalculator.calculateClassPathEntries(project, dependencies,
getLog());
+
classLoaderEntriesCalculator.calculateClassPathEntries(request);
if ( classLoaderEntries != null )
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]