You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ol...@apache.org on 2011/10/08 19:44:42 UTC
svn commit: r1180425 - in /tomcat/maven-plugin/trunk:
common-tomcat-maven-plugin/
common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/
tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/
Author: olamy
Date: Sat Oct 8 17:44:42 2011
New Revision: 1180425
URL: http://svn.apache.org/viewvc?rev=1180425&view=rev
Log:
[MTOMCAT-62] tomcat7 support: move webapp classLoader entries calculation to an external component.
Added:
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculator.java (with props)
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java (with props)
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/TomcatRunException.java (with props)
Modified:
tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/pom.xml
tomcat/maven-plugin/trunk/tomcat6-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat6/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=1180425&r1=1180424&r2=1180425&view=diff
==============================================================================
--- tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/pom.xml (original)
+++ tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/pom.xml Sat Oct 8 17:44:42 2011
@@ -16,6 +16,10 @@
<artifactId>maven-plugin-api</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-annotations</artifactId>
<version>1.5.5</version>
Added: 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=1180425&view=auto
==============================================================================
--- tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculator.java (added)
+++ tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculator.java Sat Oct 8 17:44:42 2011
@@ -0,0 +1,36 @@
+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.List;
+import java.util.Set;
+
+/**
+ * @author Olivier Lamy
+ * @since 2.0
+ */
+public interface ClassLoaderEntriesCalculator
+{
+ List<String> calculateClassPathEntries( MavenProject mavenProject, Set<Artifact> dependencies, Log log )
+ throws TomcatRunException;
+}
Propchange: tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/ClassLoaderEntriesCalculator.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: 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=1180425&view=auto
==============================================================================
--- tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java (added)
+++ tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java Sat Oct 8 17:44:42 2011
@@ -0,0 +1,113 @@
+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.artifact.DependencyResolutionRequiredException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Olivier Lamy
+ * @since 2.0
+ */
+@Component( role = ClassLoaderEntriesCalculator.class )
+public class DefaultClassLoaderEntriesCalculator
+ implements ClassLoaderEntriesCalculator
+{
+ public List<String> calculateClassPathEntries(MavenProject project, Set<Artifact> dependencies, Log log)
+ throws TomcatRunException
+ {
+ List<String> classLoaderEntries = new ArrayList<String>();
+ // add classes directories to loader
+
+ try
+ {
+ @SuppressWarnings( "unchecked" ) List<String> classPathElements = project.getCompileClasspathElements();
+ if ( classPathElements != null )
+ {
+ for ( String classPathElement : classPathElements )
+ {
+ File classPathElementFile = new File(classPathElement);
+ if ( classPathElementFile.exists() && classPathElementFile.isDirectory() )
+ {
+ log.debug("adding classPathElementFile " + classPathElementFile.toURI().toString());
+ classLoaderEntries.add(classPathElementFile.toURI().toString());
+ }
+ }
+ }
+ }
+ catch ( DependencyResolutionRequiredException e )
+ {
+ throw new TomcatRunException(e.getMessage(), e);
+ }
+
+ // add artifacts to loader
+ if ( dependencies != null )
+ {
+ for ( Artifact artifact : dependencies )
+ {
+ String scope = artifact.getScope();
+
+ // skip provided and test scoped artifacts
+ if ( !Artifact.SCOPE_PROVIDED.equals(scope) && !Artifact.SCOPE_TEST.equals(scope) )
+ {
+ log.debug(
+ "add dependency to webapploader " + artifact.getGroupId() + ":" + artifact.getArtifactId() + ":"
+ + artifact.getVersion() + ":" + artifact.getScope());
+ if ( !isInProjectReferences(artifact, project) )
+ {
+ classLoaderEntries.add(artifact.getFile().toURI().toString());
+ }
+ else
+ {
+ log.debug("skip adding artifact " + artifact.getArtifactId() + " as it's in reactors");
+ }
+ }
+ }
+ }
+ return classLoaderEntries;
+ }
+
+ protected boolean isInProjectReferences(Artifact artifact, MavenProject project)
+ {
+ if ( project.getProjectReferences() == null || project.getProjectReferences().isEmpty() )
+ {
+ return false;
+ }
+ @SuppressWarnings( "unchecked" ) Collection<MavenProject> mavenProjects =
+ project.getProjectReferences().values();
+ for ( MavenProject mavenProject : mavenProjects )
+ {
+ if ( StringUtils.equals(mavenProject.getId(), artifact.getId()) )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+}
Propchange: tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/DefaultClassLoaderEntriesCalculator.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/TomcatRunException.java
URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/TomcatRunException.java?rev=1180425&view=auto
==============================================================================
--- tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/TomcatRunException.java (added)
+++ tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/TomcatRunException.java Sat Oct 8 17:44:42 2011
@@ -0,0 +1,32 @@
+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.
+ */
+
+/**
+ * @author Olivier Lamy
+ * @since 2.0
+ */
+public class TomcatRunException
+ extends Exception
+{
+ public TomcatRunException( String s, Throwable throwable )
+ {
+ super(s, throwable);
+ }
+}
Propchange: tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/TomcatRunException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/maven-plugin/trunk/common-tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/common/run/TomcatRunException.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
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=1180425&r1=1180424&r2=1180425&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 Sat Oct 8 17:44:42 2011
@@ -23,11 +23,10 @@ import org.apache.catalina.Context;
import org.apache.catalina.loader.WebappLoader;
import org.apache.catalina.startup.Embedded;
import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.project.MavenProject;
+import org.apache.tomcat.maven.common.run.ClassLoaderEntriesCalculator;
+import org.apache.tomcat.maven.common.run.TomcatRunException;
import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
import org.codehaus.plexus.util.xml.Xpp3DomWriter;
@@ -38,7 +37,6 @@ import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
-import java.util.Collection;
import java.util.List;
import java.util.Set;
@@ -100,6 +98,13 @@ public class RunMojo
*/
protected int backgroundProcessorDelay = -1;
+ /**
+ * @readonly
+ * @component
+ * @since 2.0
+ */
+ private ClassLoaderEntriesCalculator classLoaderEntriesCalculator;
+
private File temporaryContextFile = null;
// ----------------------------------------------------------------------
@@ -112,12 +117,12 @@ public class RunMojo
* @throws MojoExecutionException
*/
@Override
- protected Context createContext( Embedded container )
+ protected Context createContext(Embedded container)
throws IOException, MojoExecutionException
{
- Context context = super.createContext( container );
+ Context context = super.createContext(container);
- context.setReloadable( isContextReloadable( ) );
+ context.setReloadable(isContextReloadable());
return context;
}
@@ -128,92 +133,43 @@ public class RunMojo
* @throws MojoExecutionException
*/
@Override
- protected WebappLoader createWebappLoader( )
+ protected WebappLoader createWebappLoader()
throws IOException, MojoExecutionException
{
- WebappLoader loader = super.createWebappLoader( );
- //super.project.
+ WebappLoader loader = super.createWebappLoader();
if ( useSeparateTomcatClassLoader )
{
- loader.setDelegate( delegate );
+ loader.setDelegate(delegate);
}
- // add classes directories to loader
- if ( classesDir != null )
+ try
{
- try
- {
- @SuppressWarnings( "unchecked" ) List<String> classPathElements =
- project.getCompileClasspathElements( );
- for ( String classPathElement : classPathElements )
- {
- File classPathElementFile = new File( classPathElement );
- if ( classPathElementFile.exists( ) && classPathElementFile.isDirectory( ) )
- {
- getLog( ).debug( "adding classPathElementFile " + classPathElementFile.toURI( ).toString( ) );
- loader.addRepository( classPathElementFile.toURI( ).toString( ) );
- }
- }
- }
- catch ( DependencyResolutionRequiredException e )
- {
- throw new MojoExecutionException( e.getMessage( ), e );
- }
- //loader.addRepository( classesDir.toURI().toString() );
- }
+ List<String> classLoaderEntries =
+ classLoaderEntriesCalculator.calculateClassPathEntries(project, dependencies, getLog());
- // add artifacts to loader
- if ( dependencies != null )
- {
- for ( Artifact artifact : dependencies )
+ if ( classLoaderEntries != null )
{
- String scope = artifact.getScope( );
-
- // skip provided and test scoped artifacts
- if ( !Artifact.SCOPE_PROVIDED.equals( scope ) && !Artifact.SCOPE_TEST.equals( scope ) )
+ for ( String classLoaderEntry : classLoaderEntries )
{
- getLog( ).debug(
- "add dependency to webapploader " + artifact.getGroupId( ) + ":" + artifact.getArtifactId( )
- + ":" + artifact.getVersion( ) + ":" + artifact.getScope( ) );
- if ( !isInProjectReferences( artifact ) )
- {
- loader.addRepository( artifact.getFile( ).toURI( ).toString( ) );
- }
- else
- {
- getLog( ).debug( "skip adding artifact " + artifact.getArtifactId( ) + " as it's in reactors" );
- }
+ loader.addRepository(classLoaderEntry);
}
}
}
+ catch ( TomcatRunException e )
+ {
+ throw new MojoExecutionException(e.getMessage(), e);
+ }
return loader;
}
- protected boolean isInProjectReferences( Artifact artifact )
- {
- if ( project.getProjectReferences( ) == null || project.getProjectReferences( ).isEmpty( ) )
- {
- return false;
- }
- @SuppressWarnings( "unchecked" ) Collection<MavenProject> mavenProjects =
- project.getProjectReferences( ).values( );
- for ( MavenProject mavenProject : mavenProjects )
- {
- if ( StringUtils.equals( mavenProject.getId( ), artifact.getId( ) ) )
- {
- return true;
- }
- }
- return false;
- }
/**
* {@inheritDoc}
*/
@Override
- protected File getDocBase( )
+ protected File getDocBase()
{
return warSourceDirectory;
}
@@ -222,7 +178,7 @@ public class RunMojo
* {@inheritDoc}
*/
@Override
- protected File getContextFile( )
+ protected File getContextFile()
throws MojoExecutionException
{
if ( temporaryContextFile != null )
@@ -236,34 +192,34 @@ public class RunMojo
//----------------------------------------------------------------------------
FileReader fr = null;
FileWriter fw = null;
- StringWriter sw = new StringWriter( );
+ StringWriter sw = new StringWriter();
try
{
- temporaryContextFile = File.createTempFile( "tomcat-maven-plugin", "temp-ctx-file" );
- fw = new FileWriter( temporaryContextFile );
+ temporaryContextFile = File.createTempFile("tomcat-maven-plugin", "temp-ctx-file");
+ fw = new FileWriter(temporaryContextFile);
// format to modify/create <Context backgroundProcessorDelay="5" reloadable="false">
- if ( contextFile != null && contextFile.exists( ) )
+ if ( contextFile != null && contextFile.exists() )
{
- fr = new FileReader( contextFile );
- Xpp3Dom xpp3Dom = Xpp3DomBuilder.build( fr );
- xpp3Dom.setAttribute( "backgroundProcessorDelay", Integer.toString( backgroundProcessorDelay ) );
- xpp3Dom.setAttribute( "reloadable", Boolean.toString( isContextReloadable( ) ) );
- Xpp3DomWriter.write( fw, xpp3Dom );
- Xpp3DomWriter.write( sw, xpp3Dom );
- getLog( ).debug( " generated context file " + sw.toString( ) );
+ fr = new FileReader(contextFile);
+ Xpp3Dom xpp3Dom = Xpp3DomBuilder.build(fr);
+ xpp3Dom.setAttribute("backgroundProcessorDelay", Integer.toString(backgroundProcessorDelay));
+ xpp3Dom.setAttribute("reloadable", Boolean.toString(isContextReloadable()));
+ Xpp3DomWriter.write(fw, xpp3Dom);
+ Xpp3DomWriter.write(sw, xpp3Dom);
+ getLog().debug(" generated context file " + sw.toString());
}
else
{
if ( contextReloadable )
{
// don't care about using a complicated xml api to create one xml line :-)
- StringBuilder sb = new StringBuilder( "<Context " ).append( "backgroundProcessorDelay=\"" ).append(
- Integer.toString( backgroundProcessorDelay ) ).append( "\"" ).append(
- " reloadable=\"" + Boolean.toString( isContextReloadable( ) ) + "\"/>" );
+ StringBuilder sb = new StringBuilder("<Context ").append("backgroundProcessorDelay=\"").append(
+ Integer.toString(backgroundProcessorDelay)).append("\"").append(
+ " reloadable=\"" + Boolean.toString(isContextReloadable()) + "\"/>");
- getLog( ).debug( " generated context file " + sb.toString( ) );
+ getLog().debug(" generated context file " + sb.toString());
- fw.write( sb.toString( ) );
+ fw.write(sb.toString());
}
else
{
@@ -274,19 +230,19 @@ public class RunMojo
}
catch ( IOException e )
{
- getLog( ).error( "error creating fake context.xml : " + e.getMessage( ), e );
- throw new MojoExecutionException( "error creating fake context.xml : " + e.getMessage( ), e );
+ getLog().error("error creating fake context.xml : " + e.getMessage(), e);
+ throw new MojoExecutionException("error creating fake context.xml : " + e.getMessage(), e);
}
catch ( XmlPullParserException e )
{
- getLog( ).error( "error creating fake context.xml : " + e.getMessage( ), e );
- throw new MojoExecutionException( "error creating fake context.xml : " + e.getMessage( ), e );
+ getLog().error("error creating fake context.xml : " + e.getMessage(), e);
+ throw new MojoExecutionException("error creating fake context.xml : " + e.getMessage(), e);
}
finally
{
- IOUtil.close( fw );
- IOUtil.close( fr );
- IOUtil.close( sw );
+ IOUtil.close(fw);
+ IOUtil.close(fr);
+ IOUtil.close(sw);
}
return temporaryContextFile;
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org