
org.codehaus.plexus.archiver.war.WarArchiver Maven / Gradle / Ivy
/*
* Copyright 2000-2004 The Apache Software Foundation
*
* Licensed 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.codehaus.plexus.archiver.war;
import javax.inject.Named;
import java.io.File;
import java.io.IOException;
import org.codehaus.plexus.archiver.ArchiveEntry;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.archiver.jar.JarArchiver;
import org.codehaus.plexus.archiver.util.ResourceUtils;
import org.codehaus.plexus.archiver.zip.ConcurrentJarCreator;
/**
* An extension of <jar> to create a WAR archive.
* Contains special treatment for files that should end up in the
* WEB-INF/lib
, WEB-INF/classes
or
* WEB-INF
directories of the Web Application Archive.
*
* (The War task is a shortcut for specifying the particular layout of a WAR file.
* The same thing can be accomplished by using the prefix and fullpath
* attributes of zipfilesets in a Zip or Jar task.)
*
* The extended zipfileset element from the zip task
* (with attributes prefix, fullpath, and src)
* is available in the War task.
*
* @see JarArchiver
*/
@Named("war")
public class WarArchiver extends JarArchiver {
/**
* our web.xml deployment descriptor
*/
private File deploymentDescriptor;
/**
* flag set if finding the webxml is to be expected.
*/
private boolean expectWebXml = true;
/**
* flag set if the descriptor is added
*/
private boolean descriptorAdded;
/**
* @deprecated Use setExpectWebXml instead !
* @param excpectWebXml true if web xml is *expected* from the client
*/
@Deprecated
public void setIgnoreWebxml(boolean excpectWebXml) {
expectWebXml = excpectWebXml;
}
/**
* Indicates if the client is required to supply web.xml
*
* @param expectWebXml true if web xml is *expected* from the client
*/
public void setExpectWebXml(boolean expectWebXml) {
this.expectWebXml = expectWebXml;
}
public WarArchiver() {
super();
archiveType = "war";
}
/**
* set the deployment descriptor to use (WEB-INF/web.xml);
* required unless update=true
*/
public void setWebxml(File descr) throws ArchiverException {
deploymentDescriptor = descr;
if (!deploymentDescriptor.exists()) {
throw new ArchiverException("Deployment descriptor: " + deploymentDescriptor + " does not exist.");
}
addFile(descr, "WEB-INF" + File.separatorChar + "web.xml");
}
/**
* add a file under WEB-INF/lib/
*/
public void addLib(File fileName) throws ArchiverException {
addDirectory(fileName.getParentFile(), "WEB-INF/lib/", new String[] {fileName.getName()}, null);
}
/**
* add files under WEB-INF/lib/
*/
public void addLibs(File directoryName, String[] includes, String[] excludes) throws ArchiverException {
addDirectory(directoryName, "WEB-INF/lib/", includes, excludes);
}
/**
* add a file under WEB-INF/lib/
*/
public void addClass(File fileName) throws ArchiverException {
addDirectory(fileName.getParentFile(), "WEB-INF/classes/", new String[] {fileName.getName()}, null);
}
/**
* add files under WEB-INF/classes
*/
public void addClasses(File directoryName, String[] includes, String[] excludes) throws ArchiverException {
addDirectory(directoryName, "WEB-INF/classes/", includes, excludes);
}
/**
* files to add under WEB-INF;
*/
public void addWebinf(File directoryName, String[] includes, String[] excludes) throws ArchiverException {
addDirectory(directoryName, "WEB-INF/", includes, excludes);
}
/**
* override of parent; validates configuration
* before initializing the output stream.
*
* @param zOut
*/
@Override
protected void initZipOutputStream(ConcurrentJarCreator zOut) throws ArchiverException, IOException {
// If no webxml file is specified, it's an error.
if (expectWebXml && deploymentDescriptor == null && !isInUpdateMode()) {
throw new ArchiverException(
"webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)");
}
super.initZipOutputStream(zOut);
}
/**
* Overridden from ZipArchiver class to deal with web.xml
*/
@Override
protected void zipFile(ArchiveEntry entry, ConcurrentJarCreator zOut, String vPath)
throws IOException, ArchiverException {
// If the file being added is WEB-INF/web.xml, we warn if it's
// not the one specified in the "webxml" attribute - or if
// it's being added twice, meaning the same file is specified
// by the "webxml" attribute and in a element.
if (vPath.equalsIgnoreCase("WEB-INF/web.xml")) {
if (descriptorAdded
|| (expectWebXml
&& (deploymentDescriptor == null
|| !ResourceUtils.isCanonicalizedSame(
entry.getResource(), deploymentDescriptor)))) {
getLogger()
.warn("Warning: selected " + archiveType
+ " files include a WEB-INF/web.xml which will be ignored "
+ "\n(webxml attribute is missing from "
+ archiveType + " task, or ignoreWebxml attribute is specified as 'true')");
} else {
super.zipFile(entry, zOut, vPath);
descriptorAdded = true;
}
} else {
super.zipFile(entry, zOut, vPath);
}
}
/**
* Make sure we don't think we already have a web.xml next time this task
* gets executed.
*/
@Override
protected void cleanUp() throws IOException {
descriptorAdded = false;
expectWebXml = true;
super.cleanUp();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy