All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.pluto.maven.AssembleMojo Maven / Gradle / Ivy

There is a newer version: 2.1.0-M3
Show newest version
/*
 * 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.
 */
package org.apache.pluto.maven;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
import org.apache.pluto.util.UtilityException;
import org.apache.pluto.util.assemble.Assembler;
import org.apache.pluto.util.assemble.AssemblerConfig;
import org.apache.pluto.util.assemble.AssemblerFactory;

/**
 * The AssembleMojo is responsible for assembling a web application for deployment
 * into the Pluto portlet container.  Assembly, in this context, is the process of
 * updating a web application's WEB-INF/web.xml with Pluto specific parameters for 
 * deployment in Pluto.   
 * 

* This Mojo is able to operate on individual descriptors by specifying * portletXml, webXml, and webXmlDestination. * If your project uses standard Maven 2 directory layouts, the defaults will * provide proper values. *

* Example Maven 2 pom.xml usage: *

 * <project>
 *   ...
 *   <build>
 *      <plugins>
 *          <plugin>
 *              <groupId>org.apache.pluto</groupId>
 *              <artifactId>maven-pluto-plugin</artifactId>
 *          </plugin>
 *      </plugins>
 *   </build>
 *   ...
 * </project>
 * 
*

* This Mojo can also operate on entire WAR or EAR archive files by specifying * a list of archive path names in archives. *

* Example Maven 2 pom.xml usage: *

 * <project>
 *   ...
 *   <build>
 *      <plugins>
 *          <plugin>
 *              <groupId>org.apache.pluto</groupId>
 *              <artifactId>maven-pluto-plugin</artifactId>
 *              <executions>
 *                  <execution>
 *                      <phase>package</phase>
 *                      <goals>
 *                          <goal>assemble</goal>
 *                      </goals>
 *                      <configuration>
 *                          <assemblyOutputDirectory>${project.build.directory}/assembled-wars</assemblyOutputDirectory>
 *                          <archives>
 *                              <assembleArchive>
 *                                  ${project.build.directory}/wartoassemble.war
 *                              </assembleArchive>
 *                              <assembleArchive>
 *                                  ${project.build.directory}/anotherwartoassemble.war
 *                              </assembleArchive>
 *                          </archives>
 *                      </configuration>
 *                  </execution>
 *              </executions>
 *          </plugin>
 *      </plugins>
 *   </build>
 *   ...
 * </project>
 * 
* * @since Jul 30, 2005 * @see org.apache.pluto.util.assemble.Assembler * * @goal assemble * @description prepares a web application as a portlet application * @phase process-resources */ public class AssembleMojo extends AbstractPortletMojo { // Private Member Variables ------------------------------------------------ /** * The portlet application descriptor (WEB-INF/portlet.xml). * @parameter expression="${basedir}/src/main/webapp/WEB-INF/portlet.xml" * @required */ private File portletXml; /** * The original webapp descriptor (WEB-INF/web.xml). * @parameter expression="${basedir}/src/main/webapp/WEB-INF/web.xml" * @required */ private File webXml; /** * The file to which the updated webapp descriptor is written. * @parameter expression="${project.build.directory}/pluto-resources/web.xml" */ private File webXmlDestination; /** * The name of the dispatch servlet class to use * @parameter */ private String dispatchServletClass; /** * A list of archive files to assemble. Only EAR and WAR file * types are supported. *

* Each value in the list is the absolute pathname to the * archive being assembled. *

* This parameter is mutually exclusive with portletXml, webXml, * and webXmlDestination parameters. * * @parameter alias="warFiles" */ private List archives; /** * @deprecated see archives parameter * @parameter */ private List warFiles; /** * Destination directory the assembled files are written out to. * @parameter alias="warFilesDestination" expression="${project.build.directory}/pluto-assembled-wars" */ private File assemblyOutputDirectory; /** * Destination directory the assembled files are written out to. * @parameter * @deprecated see assemblyOutputDirectory parameter */ private File warFilesDestination; // AbstractPlutoMojo Impl -------------------------------------------------- protected void doExecute() throws MojoExecutionException { // Log parameter values. Log log = getLog(); if (log.isInfoEnabled()) { if (archives == null || archives.isEmpty()) { log.info("Reading web.xml from :" + webXml.getAbsolutePath()); log.info("Reading portlet.xml from: " + portletXml.getAbsolutePath()); log.info("Writing web.xml to: " + webXmlDestination.getAbsolutePath()); } } try { // Assemble portlet app by updating web.xml. if (archives == null || archives.isEmpty()) { AssemblerConfig config = createAssemblerConfig(); Assembler assembler = AssemblerFactory.getFactory() .createAssembler(config); assembler.assemble(config); } else { for (Iterator i = archives.iterator(); i.hasNext();) { File archive = new File(i.next().toString()); if (log.isInfoEnabled()) { log.info("Assembling archive file " + archive.getAbsolutePath() + " to directory " + assemblyOutputDirectory.getAbsolutePath()); } AssemblerConfig config = createArchiveAssemblerConfig(archive, assemblyOutputDirectory); Assembler assembler = AssemblerFactory.getFactory() .createAssembler(config); assembler.assemble(config); } } } catch (UtilityException e) { log.error("Assembly failed: " + e.getMessage(), e); } } protected void doValidate() throws MojoExecutionException { Log log = getLog(); // Support for the old 'warFiles' mojo parameter. Apparently // the alias for the 'archives' parameter doesn't work properly. if (! (warFiles == null || warFiles.isEmpty()) ) { log.warn( "'warFiles' parameter is deprecated. Use 'archives' parameter instead." ); if ( archives == null ) { archives = new ArrayList(); } archives.addAll( warFiles ); } // Warn if the old 'warFilesDestination' mojo parameter is used if ( warFilesDestination != null ) { log.warn( "'warFilesDestination' parameter is deprecated. Use 'assemblyOutputDirectory' instead." ); assemblyOutputDirectory = warFilesDestination; } // If a list of war files are supplied: // 1) webXml, portletXml, and webXmlDestination parameters are ignored // 2) verify the files in the List exist. // 3) verify the destination is a directory, or create it if it doesn't exist. // A list of files was supplied so we ignore other parameters. if (archives != null && !archives.isEmpty()) { if (webXml != null) { log.debug("archives parameter and webXml parameter are mutually exclusive. Ignoring webXml parameter."); } if (portletXml != null) { log.debug("archives parameter and portletXml parameter are mutually exclusive. Ignoring portletXml parameter."); } if (webXmlDestination != null) { log.debug("archives parameter and webXmlDestination parameter are mutually exclusive. Ignoring webXmlDestination parameter."); } // verify each file can be found for (Iterator i = archives.iterator(); i.hasNext();) { File f = new File(i.next().toString()); if (!f.exists()) { log.warn("File " + f.getAbsolutePath() + " does not exist."); i.remove(); continue; } if (!f.canRead()) { log.warn("File " + f.getAbsolutePath() + " exists but cannot be read."); i.remove(); continue; } } // check to see if the warFiles list is now empty if (archives.isEmpty()) { throw new MojoExecutionException("No war files could be installed due errors."); } // check to see if the dest dir exists or create it. if (!assemblyOutputDirectory.exists()) { if (log.isDebugEnabled()) { log.debug("Creating destination directory for assembled war files: " + assemblyOutputDirectory.getAbsolutePath()); } try { if(!assemblyOutputDirectory.mkdirs()) { throw new MojoExecutionException("Unable to create destination directory for assembled war files: " + assemblyOutputDirectory.getAbsolutePath()); } } catch (SecurityException e) { throw new MojoExecutionException("Unable to create destination directory for assembled war files: " + e.getMessage(), e); } } else { if (!assemblyOutputDirectory.isDirectory()) { throw new MojoExecutionException("Specified destination for assembled war files " + assemblyOutputDirectory.getAbsolutePath() + " is not a directory!"); } if (!assemblyOutputDirectory.canRead()||!assemblyOutputDirectory.canWrite()) { throw new MojoExecutionException("Unable to read or write to destination directory for assembed war files. " + "Check permissions on the directory " + assemblyOutputDirectory.getAbsolutePath()); } } // A list of archive files was not provided, so use the other parameters instead. } else { if (webXml == null || !webXml.exists()) { throw new MojoExecutionException("Web application descriptor must be a valid web.xml"); } if (portletXml == null || !portletXml.exists()) { throw new MojoExecutionException("Portlet descriptor must be a valid portlet.xml"); } } } // Private Methods --------------------------------------------------------- private AssemblerConfig createAssemblerConfig() { AssemblerConfig config = new AssemblerConfig(); config.setPortletDescriptor(portletXml); config.setWebappDescriptor(webXml); config.setDestination(webXmlDestination); config.setDispatchServletClass(dispatchServletClass); return config; } private AssemblerConfig createArchiveAssemblerConfig(File archiveToAssemble, File destinationDirectory) { AssemblerConfig config = new AssemblerConfig(); config.setDispatchServletClass(dispatchServletClass); config.setSource(archiveToAssemble); config.setDestination(destinationDirectory); return config; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy