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 2016/08/16 01:03:15 UTC
svn commit: r1756441 [2/7] - in /tomcat/maven-plugin/trunk: ./
tomcat-maven-archetype/src/main/resources/archetype-resources/
tomcat-maven-archetype/src/main/resources/archetype-resources/__rootArtifactId__-webapp/
tomcat8-maven-plugin/ tomcat8-maven-p...
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/AbstractDeployWarMojo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/AbstractDeployWarMojo.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/DeployMojo.java
URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/DeployMojo.java?rev=1756441&view=auto
==============================================================================
--- tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/DeployMojo.java (added)
+++ tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/DeployMojo.java Tue Aug 16 01:03:14 2016
@@ -0,0 +1,37 @@
+package org.apache.tomcat.maven.plugin.tomcat8.deploy;
+
+/*
+ * 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.plugins.annotations.Execute;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+
+/**
+ * Deploy a WAR to Tomcat.
+ *
+ * @author Mark Hobson <ma...@gmail.com>
+ */
+@Mojo(name = "deploy", threadSafe = true)
+@Execute(phase = LifecyclePhase.PACKAGE)
+public class DeployMojo
+ extends AbstractDeployWarMojo
+{
+ // no-op : only mojo metadata overriding
+}
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/DeployMojo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/DeployMojo.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/DeployOnlyMojo.java
URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/DeployOnlyMojo.java?rev=1756441&view=auto
==============================================================================
--- tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/DeployOnlyMojo.java (added)
+++ tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/DeployOnlyMojo.java Tue Aug 16 01:03:14 2016
@@ -0,0 +1,35 @@
+package org.apache.tomcat.maven.plugin.tomcat8.deploy;
+
+/*
+ * 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.plugins.annotations.Mojo;
+
+/**
+ * Deploy a WAR to Tomcat without forking the package lifecycle.
+ *
+ * @author olamy
+ * @since 1.0-alpha-2
+ */
+@Mojo(name = "deploy-only", threadSafe = true)
+public class DeployOnlyMojo
+ extends AbstractDeployWarMojo
+{
+ // no-op : only mojo metadata overriding
+}
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/DeployOnlyMojo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/DeployOnlyMojo.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/RedeployMojo.java
URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/RedeployMojo.java?rev=1756441&view=auto
==============================================================================
--- tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/RedeployMojo.java (added)
+++ tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/RedeployMojo.java Tue Aug 16 01:03:14 2016
@@ -0,0 +1,43 @@
+package org.apache.tomcat.maven.plugin.tomcat8.deploy;
+
+/*
+ * 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.plugins.annotations.Execute;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+
+/**
+ * Redeploy a WAR in Tomcat. (Alias for the deploy goal with its update parameter set to true.)
+ *
+ * @author Olivier Lamy
+ * @since 2.1
+ */
+@Mojo(name = "redeploy", threadSafe = true)
+@Execute(phase = LifecyclePhase.PACKAGE)
+public class RedeployMojo
+ extends DeployMojo
+{
+ @Override
+ protected boolean isUpdate()
+ {
+ return true;
+ }
+
+}
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/RedeployMojo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/RedeployMojo.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/RedeployOnlyMojo.java
URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/RedeployOnlyMojo.java?rev=1756441&view=auto
==============================================================================
--- tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/RedeployOnlyMojo.java (added)
+++ tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/RedeployOnlyMojo.java Tue Aug 16 01:03:14 2016
@@ -0,0 +1,40 @@
+package org.apache.tomcat.maven.plugin.tomcat8.deploy;
+
+/*
+ * 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.plugins.annotations.Mojo;
+
+/**
+ * Redeploy a WAR in Tomcat without forking the package lifecycle.
+ * (Alias for the deploy-only goal with its update parameter set to true.)
+ *
+ * @since 2.1
+ */
+@Mojo( name = "redeploy-only", threadSafe = true )
+public class RedeployOnlyMojo
+ extends DeployOnlyMojo
+{
+ @Override
+ protected boolean isUpdate()
+ {
+ return true;
+ }
+
+}
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/RedeployOnlyMojo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/RedeployOnlyMojo.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/UndeployMojo.java
URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/UndeployMojo.java?rev=1756441&view=auto
==============================================================================
--- tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/UndeployMojo.java (added)
+++ tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/UndeployMojo.java Tue Aug 16 01:03:14 2016
@@ -0,0 +1,84 @@
+package org.apache.tomcat.maven.plugin.tomcat8.deploy;
+
+/*
+ * 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.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.tomcat.maven.common.deployer.TomcatManagerException;
+import org.apache.tomcat.maven.common.deployer.TomcatManagerResponse;
+import org.apache.tomcat.maven.plugin.tomcat8.AbstractWarCatalinaMojo;
+
+import java.io.IOException;
+
+/**
+ * Undeploy a WAR from Tomcat.
+ *
+ * @since 2.1
+ */
+@Mojo( name = "undeploy", threadSafe = true )
+public class UndeployMojo
+ extends AbstractWarCatalinaMojo
+{
+ // ----------------------------------------------------------------------
+ // Mojo Parameters
+ // ----------------------------------------------------------------------
+
+ /**
+ * Whether to fail the build if the web application cannot be undeployed.
+ */
+ @Parameter( property = "maven.tomcat.failOnError", defaultValue = "true" )
+ private boolean failOnError;
+
+ // ----------------------------------------------------------------------
+ // Protected Methods
+ // ----------------------------------------------------------------------
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void invokeManager()
+ throws MojoExecutionException, TomcatManagerException, IOException
+ {
+ getLog().info( messagesProvider.getMessage( "UndeployMojo.undeployingApp", getDeployedURL() ) );
+
+ try
+ {
+
+ TomcatManagerResponse tomcatResponse = getManager().undeploy( getPath() );
+
+ checkTomcatResponse( tomcatResponse );
+
+ log( tomcatResponse.getHttpResponseBody() );
+
+ }
+ catch ( TomcatManagerException e )
+ {
+ if ( failOnError )
+ {
+ throw e;
+ }
+
+ getLog().warn( messagesProvider.getMessage( "UndeployMojo.undeployError", e.getMessage() ) );
+ }
+ }
+
+}
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/UndeployMojo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/deploy/UndeployMojo.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/run/AbstractExecWarMojo.java
URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/run/AbstractExecWarMojo.java?rev=1756441&view=auto
==============================================================================
--- tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/run/AbstractExecWarMojo.java (added)
+++ tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/run/AbstractExecWarMojo.java Tue Aug 16 01:03:14 2016
@@ -0,0 +1,677 @@
+package org.apache.tomcat.maven.plugin.tomcat8.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.commons.compress.archivers.ArchiveException;
+import org.apache.commons.compress.archivers.ArchiveOutputStream;
+import org.apache.commons.compress.archivers.ArchiveStreamFactory;
+import org.apache.commons.compress.archivers.jar.JarArchiveEntry;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectHelper;
+import org.apache.tomcat.maven.plugin.tomcat8.AbstractTomcat7Mojo;
+import org.apache.tomcat.maven.runner.Tomcat7Runner;
+import org.apache.tomcat.maven.runner.Tomcat7RunnerCli;
+import org.codehaus.plexus.archiver.jar.Manifest;
+import org.codehaus.plexus.archiver.jar.ManifestException;
+import org.codehaus.plexus.util.DirectoryScanner;
+import org.codehaus.plexus.util.SelectorUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+/**
+ * @author Olivier Lamy
+ * @since 2.0
+ */
+public abstract class AbstractExecWarMojo
+ extends AbstractTomcat7Mojo
+{
+
+ @Parameter( defaultValue = "${project.artifact}", required = true, readonly = true )
+ protected Artifact projectArtifact;
+
+ /**
+ * The maven project.
+ */
+ @Parameter( defaultValue = "${project}", required = true, readonly = true )
+ protected MavenProject project;
+
+ @Parameter( defaultValue = "${plugin.artifacts}", required = true )
+ protected List<Artifact> pluginArtifacts;
+
+ @Parameter( defaultValue = "${project.build.directory}" )
+ protected File buildDirectory;
+
+ /**
+ * Path under {@link #buildDirectory} where this mojo may do temporary work.
+ */
+ @Parameter( defaultValue = "${project.build.directory}/tomcat7-maven-plugin-exec" )
+ private File pluginWorkDirectory;
+
+ @Parameter( property = "maven.tomcat.exec.war.tomcatConf", defaultValue = "src/main/tomcatconf" )
+ protected File tomcatConfigurationFilesDirectory;
+
+ @Parameter( defaultValue = "src/main/tomcatconf/server.xml", property = "maven.tomcat.exec.war.serverXml" )
+ protected File serverXml;
+
+ /**
+ * Name of the generated exec JAR.
+ */
+ @Parameter( property = "tomcat.jar.finalName",
+ defaultValue = "${project.artifactId}-${project.version}-war-exec.jar", required = true )
+ protected String finalName;
+
+ /**
+ * Skip the execution
+ *
+ * @since 2.2
+ */
+ @Parameter( property = "maven.tomcat.skip", defaultValue = "false" )
+ private boolean skip;
+
+ /**
+ * The webapp context path to use for the web application being run.
+ * The name to store webapp in exec jar. Do not use /
+ */
+ @Parameter( property = "maven.tomcat.path", defaultValue = "${project.artifactId}", required = true )
+ protected String path;
+
+ @Parameter
+ protected List<WarRunDependency> warRunDependencies;
+
+ @Component
+ protected ArtifactResolver artifactResolver;
+
+ /**
+ * Maven Artifact Factory component.
+ */
+ @Component
+ protected ArtifactFactory artifactFactory;
+
+ /**
+ * Location of the local repository.
+ */
+ @Parameter( defaultValue = "${localRepository}", required = true, readonly = true )
+ protected ArtifactRepository local;
+
+ /**
+ * List of Remote Repositories used by the resolver
+ */
+ @Parameter( defaultValue = "${project.remoteArtifactRepositories}", required = true, readonly = true )
+ protected List<ArtifactRepository> remoteRepos;
+
+ @Component
+ protected MavenProjectHelper projectHelper;
+
+ /**
+ * Attach or not the generated artifact to the build (use true if you want to install or deploy it)
+ */
+ @Parameter( property = "maven.tomcat.exec.war.attachArtifact", defaultValue = "true", required = true )
+ protected boolean attachArtifact;
+
+
+ /**
+ * the classifier to use for the attached/generated artifact
+ */
+ @Parameter( property = "maven.tomcat.exec.war.attachArtifactClassifier", defaultValue = "exec-war",
+ required = true )
+ protected String attachArtifactClassifier;
+
+
+ /**
+ * the type to use for the attached/generated artifact
+ */
+ @Parameter( property = "maven.tomcat.exec.war.attachArtifactType", defaultValue = "jar", required = true )
+ protected String attachArtifactClassifierType;
+
+ /**
+ * to enable naming when starting tomcat
+ */
+ @Parameter( property = "maven.tomcat.exec.war.enableNaming", defaultValue = "false", required = true )
+ protected boolean enableNaming;
+
+ /**
+ * see http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html
+ */
+ @Parameter( property = "maven.tomcat.exec.war.accessLogValveFormat", defaultValue = "%h %l %u %t %r %s %b %I %D",
+ required = true )
+ protected String accessLogValveFormat;
+
+ /**
+ * list of extra dependencies to add in the standalone tomcat jar: your jdbc driver, mail.jar etc..
+ * <b>Those dependencies will be in root classloader.</b>
+ */
+ @Parameter
+ protected List<ExtraDependency> extraDependencies;
+
+ /**
+ * list of extra resources to add in the standalone tomcat jar: your logger configuration etc
+ */
+ @Parameter
+ protected List<ExtraResource> extraResources;
+
+ /**
+ * Main class to use for starting the standalone jar.
+ */
+ @Parameter( property = "maven.tomcat.exec.war.mainClass",
+ defaultValue = "org.apache.tomcat.maven.runner.Tomcat7RunnerCli", required = true )
+ protected String mainClass;
+
+ /**
+ * which connector protocol to use HTTP/1.1 or org.apache.coyote.http11.Http11NioProtocol
+ */
+ @Parameter( property = "maven.tomcat.exec.war.connectorHttpProtocol", defaultValue = "HTTP/1.1", required = true )
+ protected String connectorHttpProtocol;
+
+ /**
+ * configure a default http port for the standalone jar
+ *
+ * @since 2.2
+ */
+ @Parameter( property = "maven.tomcat.exec.war.httpPort" )
+ protected String httpPort;
+
+ /**
+ * File patterns to exclude from extraDependencies
+ *
+ * @since 2.2
+ */
+ @Parameter
+ protected String[] excludes;
+
+ public void execute()
+ throws MojoExecutionException, MojoFailureException
+ {
+ if ( this.skip )
+ {
+ getLog().info( "skip execution" );
+ return;
+ }
+ //project.addAttachedArtifact( );
+ File warExecFile = new File( buildDirectory, finalName );
+ if ( warExecFile.exists() )
+ {
+ warExecFile.delete();
+ }
+
+ File execWarJar = new File( buildDirectory, finalName );
+
+ FileOutputStream execWarJarOutputStream = null;
+ ArchiveOutputStream os = null;
+ File tmpPropertiesFile = null;
+ File tmpManifestFile = null;
+ FileOutputStream tmpPropertiesFileOutputStream = null;
+ PrintWriter tmpManifestWriter = null;
+
+ try
+ {
+
+ tmpPropertiesFile = new File( buildDirectory, "war-exec.properties" );
+ if ( tmpPropertiesFile.exists() )
+ {
+ tmpPropertiesFile.delete();
+ }
+ tmpPropertiesFile.getParentFile().mkdirs();
+
+ tmpManifestFile = new File( buildDirectory, "war-exec.manifest" );
+ if ( tmpManifestFile.exists() )
+ {
+ tmpManifestFile.delete();
+ }
+ tmpPropertiesFileOutputStream = new FileOutputStream( tmpPropertiesFile );
+ execWarJar.getParentFile().mkdirs();
+ execWarJar.createNewFile();
+ execWarJarOutputStream = new FileOutputStream( execWarJar );
+
+ tmpManifestWriter = new PrintWriter( tmpManifestFile );
+
+ // store :
+ //* wars in the root: foo.war
+ //* tomcat jars
+ //* file tomcat.standalone.properties with possible values :
+ // * useServerXml=true/false to use directly the one provided
+ // * enableNaming=true/false
+ // * wars=foo.war|contextpath;bar.war ( |contextpath is optionnal if empty use the war name )
+ // * accessLogValveFormat=
+ // * connectorhttpProtocol: HTTP/1.1 or org.apache.coyote.http11.Http11NioProtocol
+ //* optionnal: conf/ with usual tomcat configuration files
+ //* MANIFEST with Main-Class
+
+ Properties properties = new Properties();
+
+ properties.put( Tomcat7Runner.ARCHIVE_GENERATION_TIMESTAMP_KEY,
+ Long.toString( System.currentTimeMillis() ) );
+ properties.put( Tomcat7Runner.ENABLE_NAMING_KEY, Boolean.toString( enableNaming ) );
+ properties.put( Tomcat7Runner.ACCESS_LOG_VALVE_FORMAT_KEY, accessLogValveFormat );
+ properties.put( Tomcat7Runner.HTTP_PROTOCOL_KEY, connectorHttpProtocol );
+
+ if ( httpPort != null )
+ {
+ properties.put( Tomcat7Runner.HTTP_PORT_KEY, httpPort );
+ }
+
+ os = new ArchiveStreamFactory().createArchiveOutputStream( ArchiveStreamFactory.JAR,
+ execWarJarOutputStream );
+
+ if ( "war".equals( project.getPackaging() ) )
+ {
+
+ os.putArchiveEntry( new JarArchiveEntry( StringUtils.removeStart( path, "/" ) + ".war" ) );
+ IOUtils.copy( new FileInputStream( projectArtifact.getFile() ), os );
+ os.closeArchiveEntry();
+
+ properties.put( Tomcat7Runner.WARS_KEY, StringUtils.removeStart( path, "/" ) + ".war|" + path );
+ }
+ else if ( warRunDependencies != null && !warRunDependencies.isEmpty() )
+ {
+ for ( WarRunDependency warRunDependency : warRunDependencies )
+ {
+ if ( warRunDependency.dependency != null )
+ {
+ Dependency dependency = warRunDependency.dependency;
+ String version = dependency.getVersion();
+ if ( StringUtils.isEmpty( version ) )
+ {
+ version = findArtifactVersion( dependency );
+ }
+
+ if ( StringUtils.isEmpty( version ) )
+ {
+ throw new MojoExecutionException(
+ "Dependency '" + dependency.getGroupId() + "':'" + dependency.getArtifactId()
+ + "' does not have version specified" );
+ }
+ Artifact artifact = artifactFactory.createArtifactWithClassifier( dependency.getGroupId(),
+ dependency.getArtifactId(),
+ version,
+ dependency.getType(),
+ dependency.getClassifier() );
+
+ artifactResolver.resolve( artifact, this.remoteRepos, this.local );
+
+ File warFileToBundle = new File( resolvePluginWorkDir(), artifact.getFile().getName() );
+ FileUtils.copyFile( artifact.getFile(), warFileToBundle );
+
+ if ( warRunDependency.contextXml != null )
+ {
+ warFileToBundle = addContextXmlToWar( warRunDependency.contextXml, warFileToBundle );
+ }
+ final String warFileName = artifact.getFile().getName();
+ os.putArchiveEntry( new JarArchiveEntry( warFileName ) );
+ IOUtils.copy( new FileInputStream( warFileToBundle ), os );
+ os.closeArchiveEntry();
+ String propertyWarValue = properties.getProperty( Tomcat7Runner.WARS_KEY );
+ String contextPath =
+ StringUtils.isEmpty( warRunDependency.contextPath ) ? "/" : warRunDependency.contextPath;
+ if ( propertyWarValue != null )
+ {
+ properties.put( Tomcat7Runner.WARS_KEY,
+ propertyWarValue + ";" + warFileName + "|" + contextPath );
+ }
+ else
+ {
+ properties.put( Tomcat7Runner.WARS_KEY, warFileName + "|" + contextPath );
+ }
+ }
+ }
+ }
+
+ if ( serverXml != null && serverXml.exists() )
+ {
+ os.putArchiveEntry( new JarArchiveEntry( "conf/server.xml" ) );
+ IOUtils.copy( new FileInputStream( serverXml ), os );
+ os.closeArchiveEntry();
+ properties.put( Tomcat7Runner.USE_SERVER_XML_KEY, Boolean.TRUE.toString() );
+ }
+ else
+ {
+ properties.put( Tomcat7Runner.USE_SERVER_XML_KEY, Boolean.FALSE.toString() );
+ }
+
+ os.putArchiveEntry( new JarArchiveEntry( "conf/web.xml" ) );
+ IOUtils.copy( getClass().getResourceAsStream( "/conf/web.xml" ), os );
+ os.closeArchiveEntry();
+
+ properties.store( tmpPropertiesFileOutputStream, "created by Apache Tomcat Maven plugin" );
+
+ tmpPropertiesFileOutputStream.flush();
+ tmpPropertiesFileOutputStream.close();
+
+ os.putArchiveEntry( new JarArchiveEntry( Tomcat7RunnerCli.STAND_ALONE_PROPERTIES_FILENAME ) );
+ IOUtils.copy( new FileInputStream( tmpPropertiesFile ), os );
+ os.closeArchiveEntry();
+
+ // add tomcat classes
+ for ( Artifact pluginArtifact : pluginArtifacts )
+ {
+ if ( StringUtils.equals( "org.apache.tomcat", pluginArtifact.getGroupId() ) || StringUtils.equals(
+ "org.apache.tomcat.embed", pluginArtifact.getGroupId() ) || StringUtils.equals(
+ "org.eclipse.jdt.core.compiler", pluginArtifact.getGroupId() ) || StringUtils.equals( "commons-cli",
+ pluginArtifact.getArtifactId() )
+ || StringUtils.equals( "tomcat7-war-runner", pluginArtifact.getArtifactId() ) )
+ {
+ JarFile jarFile = new JarFile( pluginArtifact.getFile() );
+ extractJarToArchive( jarFile, os, null );
+ }
+ }
+
+ // add extra dependencies
+ if ( extraDependencies != null && !extraDependencies.isEmpty() )
+ {
+ for ( Dependency dependency : extraDependencies )
+ {
+ String version = dependency.getVersion();
+ if ( StringUtils.isEmpty( version ) )
+ {
+ version = findArtifactVersion( dependency );
+ }
+
+ if ( StringUtils.isEmpty( version ) )
+ {
+ throw new MojoExecutionException(
+ "Dependency '" + dependency.getGroupId() + "':'" + dependency.getArtifactId()
+ + "' does not have version specified" );
+ }
+
+ // String groupId, String artifactId, String version, String scope, String type
+ Artifact artifact =
+ artifactFactory.createArtifact( dependency.getGroupId(), dependency.getArtifactId(), version,
+ dependency.getScope(), dependency.getType() );
+
+ artifactResolver.resolve( artifact, this.remoteRepos, this.local );
+ JarFile jarFile = new JarFile( artifact.getFile() );
+ extractJarToArchive( jarFile, os, this.excludes );
+ }
+ }
+
+ Manifest manifest = new Manifest();
+
+ Manifest.Attribute mainClassAtt = new Manifest.Attribute();
+ mainClassAtt.setName( "Main-Class" );
+ mainClassAtt.setValue( mainClass );
+ manifest.addConfiguredAttribute( mainClassAtt );
+
+ manifest.write( tmpManifestWriter );
+ tmpManifestWriter.flush();
+ tmpManifestWriter.close();
+
+ os.putArchiveEntry( new JarArchiveEntry( "META-INF/MANIFEST.MF" ) );
+ IOUtils.copy( new FileInputStream( tmpManifestFile ), os );
+ os.closeArchiveEntry();
+
+ if ( attachArtifact )
+ {
+ //MavenProject project, String artifactType, String artifactClassifier, File artifactFile
+ projectHelper.attachArtifact( project, attachArtifactClassifierType, attachArtifactClassifier,
+ execWarJar );
+ }
+
+ if ( extraResources != null )
+ {
+ for ( ExtraResource extraResource : extraResources )
+ {
+
+ DirectoryScanner directoryScanner = new DirectoryScanner();
+ directoryScanner.setBasedir( extraResource.getDirectory() );
+ directoryScanner.addDefaultExcludes();
+ directoryScanner.setExcludes( toStringArray( extraResource.getExcludes() ) );
+ directoryScanner.setIncludes( toStringArray( extraResource.getIncludes() ) );
+ directoryScanner.scan();
+ for ( String includeFile : directoryScanner.getIncludedFiles() )
+ {
+ getLog().debug( "include file:" + includeFile );
+ os.putArchiveEntry( new JarArchiveEntry( includeFile ) );
+ IOUtils.copy( new FileInputStream( new File( extraResource.getDirectory(), includeFile ) ),
+ os );
+ os.closeArchiveEntry();
+ }
+ }
+ }
+
+ if ( tomcatConfigurationFilesDirectory != null && tomcatConfigurationFilesDirectory.exists() )
+ {
+ // Because its the tomcat default dir for configs
+ String aConfigOutputDir = "conf/";
+ copyDirectoryContentIntoArchive( tomcatConfigurationFilesDirectory, aConfigOutputDir, os );
+ }
+
+ }
+ catch ( ManifestException e )
+ {
+ throw new MojoExecutionException( e.getMessage(), e );
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( e.getMessage(), e );
+ }
+ catch ( ArchiveException e )
+ {
+ throw new MojoExecutionException( e.getMessage(), e );
+ }
+ catch ( ArtifactNotFoundException e )
+ {
+ throw new MojoExecutionException( e.getMessage(), e );
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new MojoExecutionException( e.getMessage(), e );
+ }
+ finally
+ {
+ IOUtils.closeQuietly( os );
+ IOUtils.closeQuietly( tmpManifestWriter );
+ IOUtils.closeQuietly( execWarJarOutputStream );
+ IOUtils.closeQuietly( tmpPropertiesFileOutputStream );
+ }
+ }
+
+ protected String findArtifactVersion( Dependency dependency )
+ {
+ // search in project.dependencies
+ for ( Dependency projectDependency : (List<Dependency>) this.project.getDependencies() )
+ {
+ if ( sameDependencyWithoutVersion( dependency, projectDependency ) )
+ {
+ return projectDependency.getVersion();
+ }
+ }
+
+ // search in project.dependencies
+ for ( Dependency projectDependency : (List<Dependency>) this.project.getDependencyManagement().getDependencies() )
+ {
+ if ( sameDependencyWithoutVersion( dependency, projectDependency ) )
+ {
+ return projectDependency.getVersion();
+ }
+ }
+
+ return null;
+ }
+
+ protected boolean sameDependencyWithoutVersion( Dependency that, Dependency dependency )
+ {
+ return StringUtils.equals( that.getGroupId(), dependency.getGroupId() ) && StringUtils.equals(
+ that.getArtifactId(), dependency.getArtifactId() );
+ }
+
+ protected void copyDirectoryContentIntoArchive( File sourceFolder, String destinationPath,
+ ArchiveOutputStream archiveOutputStream )
+ throws IOException
+ {
+
+ // Scan the directory
+ DirectoryScanner directoryScanner = new DirectoryScanner();
+ directoryScanner.setBasedir( sourceFolder );
+ directoryScanner.addDefaultExcludes();
+ directoryScanner.scan();
+
+ // Each File
+ for ( String includeFileName : directoryScanner.getIncludedFiles() )
+ {
+ getLog().debug( "include configuration file : " + destinationPath + includeFileName );
+ File inputFile = new File( sourceFolder, includeFileName );
+
+ FileInputStream sourceFileInputStream = null;
+ try
+ {
+ sourceFileInputStream = new FileInputStream( inputFile );
+
+ archiveOutputStream.putArchiveEntry( new JarArchiveEntry( destinationPath + includeFileName ) );
+ IOUtils.copy( sourceFileInputStream, archiveOutputStream );
+ archiveOutputStream.closeArchiveEntry();
+ }
+ finally
+ {
+ IOUtils.closeQuietly( sourceFileInputStream );
+ }
+ }
+
+ }
+
+ /**
+ * Resolves the plugin work dir as a sub directory of {@link #buildDirectory}, creating it if it does not exist.
+ *
+ * @return File representing the resolved plugin work dir
+ * @throws MojoExecutionException if the plugin work dir cannot be created
+ */
+ protected File resolvePluginWorkDir()
+ throws MojoExecutionException
+ {
+ if ( !pluginWorkDirectory.exists() && !pluginWorkDirectory.mkdirs() )
+ {
+ throw new MojoExecutionException(
+ "Could not create plugin work directory at " + pluginWorkDirectory.getAbsolutePath() );
+ }
+
+ return pluginWorkDirectory;
+
+ }
+
+ protected String[] toStringArray( List list )
+ {
+ if ( list == null || list.isEmpty() )
+ {
+ return new String[0];
+ }
+ List<String> res = new ArrayList<String>( list.size() );
+
+ for ( Iterator ite = list.iterator(); ite.hasNext(); )
+ {
+ res.add( (String) ite.next() );
+ }
+ return res.toArray( new String[res.size()] );
+ }
+
+
+ /**
+ * return file can be deleted
+ */
+ protected File addContextXmlToWar( File contextXmlFile, File warFile )
+ throws IOException, ArchiveException
+ {
+ ArchiveOutputStream os = null;
+ OutputStream warOutputStream = null;
+ File tmpWar = File.createTempFile( "tomcat", "war-exec" );
+ tmpWar.deleteOnExit();
+
+ try
+ {
+ warOutputStream = new FileOutputStream( tmpWar );
+ os = new ArchiveStreamFactory().createArchiveOutputStream( ArchiveStreamFactory.JAR, warOutputStream );
+ os.putArchiveEntry( new JarArchiveEntry( "META-INF/context.xml" ) );
+ IOUtils.copy( new FileInputStream( contextXmlFile ), os );
+ os.closeArchiveEntry();
+
+ JarFile jarFile = new JarFile( warFile );
+ extractJarToArchive( jarFile, os, null );
+ os.flush();
+ }
+ finally
+ {
+ IOUtils.closeQuietly( os );
+ IOUtils.closeQuietly( warOutputStream );
+ }
+ return tmpWar;
+ }
+
+ /**
+ * Copy the contents of a jar file to another archive
+ *
+ * @param file The input jar file
+ * @param os The output archive
+ * @throws IOException
+ */
+ protected void extractJarToArchive( JarFile file, ArchiveOutputStream os, String[] excludes )
+ throws IOException
+ {
+ Enumeration<? extends JarEntry> entries = file.entries();
+ while ( entries.hasMoreElements() )
+ {
+ JarEntry j = entries.nextElement();
+
+ if ( excludes != null && excludes.length > 0 )
+ {
+ for ( String exclude : excludes )
+ {
+ if ( SelectorUtils.match( exclude, j.getName() ) )
+ {
+ continue;
+ }
+ }
+ }
+
+ if ( StringUtils.equalsIgnoreCase( j.getName(), "META-INF/MANIFEST.MF" ) )
+ {
+ continue;
+ }
+ os.putArchiveEntry( new JarArchiveEntry( j.getName() ) );
+ IOUtils.copy( file.getInputStream( j ), os );
+ os.closeArchiveEntry();
+ }
+ if ( file != null )
+ {
+ file.close();
+ }
+ }
+}
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/run/AbstractExecWarMojo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tomcat/maven-plugin/trunk/tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/run/AbstractExecWarMojo.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org