Submitted by: Matthew Watson <mattw@mortbay.com> git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269698 13f79535-47bb-0310-9956-ffa450edef68master
@@ -0,0 +1,109 @@ | |||
<html> | |||
<head> | |||
<meta http-equiv="Content-Language" content="en-us"> | |||
<title>Ant User Manual</title> | |||
</head> | |||
<body> | |||
<h2><a name="jspc">jspc</a></h2> | |||
<h3>Description</h3> | |||
<p> Ant task to run the jsp compiler. | |||
<p> This task takes the given jsp files and compiles them into java files. It | |||
is then up to the user to compile the java files into classes. | |||
<p><h3>Parameters</h3> | |||
The Task has the following attributes: | |||
<table border="1" cellpadding="2" cellspacing="0"> | |||
<tr> | |||
<td valign="top"><b>Attribute</b></td> | |||
<td valign="top"><b>Description</b></td> | |||
<td align="center" valign="top"><b>Required</b></td> | |||
</tr> | |||
<tr> | |||
<td valign="top">destdir</td> | |||
<td valign="top">Where to place the generated files. They are located | |||
under here according to the given package name.</td> | |||
<td valign="top" align="center">Yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">srcdir</td> | |||
<td valign="top">Where to look for source jsp files.</td> | |||
<td valign="top" align="center">Yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">verbose</td> | |||
<td valign="top">The verbose flag to pass to the compiler.</td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">package</td> | |||
<td valign="top">Name of the destination package for generated java | |||
classes.</td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">ieplugin</td> | |||
<td valign="top">Java Plugin classid for Internet Explorer.</td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">mapped</td> | |||
<td valign="top">(boolean) Generate separate write() calls for each HTML | |||
line in the JSP.</td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">classpath</td> | |||
<td valign="top">The classpath to use to run the jsp compiler, if the | |||
compiler is not already in the ant classpath. This can also be specified | |||
by the nested element <code>classpath</code> (a | |||
<a href="../using.html#path">Path</a>).</td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">classpathref</td> | |||
<td valign="top">A <a href="../using.html#references">Reference</a>. As | |||
per <code>classpath</code></td> | |||
<td valign="top" align="center">No</td> | |||
</tr> | |||
* classes and classpath (the classpath to use when running the jsp | |||
* compiler). | |||
* <p> This task supports the nested elements classpath (A Path) and | |||
* classpathref (A Reference) which can be used in preference to the | |||
* attribute classpath, if the jsp compiler is not already in the ant | |||
* classpath. | |||
</table> | |||
<p> This task is a <a href="../dirtasks.html">directory based task</a>, like | |||
<strong>javac</strong>, so the jsp files to be compiled are located as java | |||
files are by <strong>javac</strong>. | |||
<p><h3>Example</h3> | |||
<pre> | |||
<jspc srcdir="${basedir}/src/war" | |||
destdir="${basedir}/gensrc" | |||
package="com.i3sp.jsp" | |||
verbose="9"> | |||
<include name="**\/*.jsp" /> | |||
</jspc> | |||
</pre> | |||
<p><h4>Notes</h4> | |||
<p> At present, this task only supports the jasper compiler. In future, | |||
other compilers will be supported by setting the jsp.compiler property. | |||
<p> The jasper compiler option <code>-webapp</code> is not supported. Using | |||
the <code>package</code> attribute it is possible to identify the resulting | |||
java files and thus do full dependency checking - this task only rebuilds | |||
java files if their jsp file has been modified. | |||
<hr> | |||
<p align="center">Copyright © 2000,2001 Apache Software Foundation. All rights | |||
Reserved.</p> | |||
</body> | |||
</html> | |||
@@ -22,6 +22,7 @@ | |||
<a href="OptionalTasks/icontract.html">IContract</a><br> | |||
<a href="OptionalTasks/javacc.html">JavaCC</a><br> | |||
<a href="OptionalTasks/javah.html">Javah</a><br> | |||
<a href="OptionalTasks/jspc.html">JspC</a><br> | |||
<a href="OptionalTasks/jdepend.html">JDepend</a><br> | |||
<a href="OptionalTasks/jjtree.html">JJTree</a><br> | |||
<a href="OptionalTasks/jlink.html">Jlink</a><br> | |||
@@ -122,6 +122,7 @@ jpcoverage=org.apache.tools.ant.taskdefs.optional.sitraka.Coverage | |||
jpcovmerge=org.apache.tools.ant.taskdefs.optional.sitraka.CovMerge | |||
jpcovreport=org.apache.tools.ant.taskdefs.optional.sitraka.CovReport | |||
p4add=org.apache.tools.ant.taskdefs.optional.perforce.P4Add | |||
jspc=org.apache.tools.ant.taskdefs.optional.jsp.JspC | |||
# deprecated ant tasks (kept for back compatibility) | |||
javadoc2=org.apache.tools.ant.taskdefs.Javadoc | |||
@@ -0,0 +1,354 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.jsp; | |||
import java.io.File; | |||
import java.util.Date; | |||
import java.util.Enumeration; | |||
import java.util.Vector; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.DirectoryScanner; | |||
import org.apache.tools.ant.Project; | |||
import org.apache.tools.ant.Task; | |||
import org.apache.tools.ant.taskdefs.MatchingTask; | |||
import org.apache.tools.ant.taskdefs.optional.jsp.compilers.*; | |||
import org.apache.tools.ant.types.Commandline; | |||
import org.apache.tools.ant.types.Path; | |||
import org.apache.tools.ant.types.Reference; | |||
/** Ant task to run the jsp compiler. | |||
* <p> This task takes the given jsp files and compiles them into java | |||
* files. It is then up to the user to compile the java files into classes. | |||
* | |||
* <p> The task requires the srcdir and destdir attributes to be | |||
* set. This Task is a MatchingTask, so the files to be compiled can be | |||
* specified using includes/excludes attributes or nested include/exclude | |||
* elements. Optional attributes are verbose (set the verbosity level passed | |||
* to jasper), package (name of the destination package for generated java | |||
* classes and classpath (the classpath to use when running the jsp | |||
* compiler). | |||
* <p> This task supports the nested elements classpath (A Path) and | |||
* classpathref (A Reference) which can be used in preference to the | |||
* attribute classpath, if the jsp compiler is not already in the ant | |||
* classpath. | |||
* | |||
* <p><h4>Notes</h4> | |||
* <p> At present, this task only supports the jasper compiler. In future, | |||
other compilers will be supported by setting the jsp.compiler property. | |||
* | |||
* <p><h4>Usage</h4> | |||
* <pre> | |||
* <jspc srcdir="${basedir}/src/war" | |||
* destdir="${basedir}/gensrc" | |||
* package="com.i3sp.jsp" | |||
* verbose="9"> | |||
* <include name="**\/*.jsp" /> | |||
* </jspc> | |||
* </pre> | |||
* | |||
* @version $Revision$ $Date$ | |||
* @author <a href="mailto:mattw@i3sp.com">Matthew Watson</a> | |||
* <p> Large Amount of cutting and pasting from the Javac task... | |||
* @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a> | |||
* @author Robin Green <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a> | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
* @author <a href="mailto:jayglanville@home.com">J D Glanville</a> | |||
*/ | |||
public class JspC extends MatchingTask | |||
{ | |||
/* ------------------------------------------------------------ */ | |||
private Path classpath; | |||
private Path src; | |||
private File destDir; | |||
private String packageName ; | |||
private String iepluginid ; | |||
private boolean mapped ; | |||
private int verbose = 0; | |||
protected Vector compileList = new Vector(); | |||
protected boolean failOnError = true; | |||
private static final String FAIL_MSG | |||
= "Compile failed, messages should have been provided."; | |||
/* ------------------------------------------------------------ */ | |||
/** | |||
* Set the source dirs to find the source JSP files. | |||
*/ | |||
public void setSrcdir(Path srcDir) { | |||
if (src == null) { | |||
src = srcDir; | |||
} else { | |||
src.append(srcDir); | |||
} | |||
} | |||
public Path getSrcDir(){ | |||
return src; | |||
} | |||
/* ------------------------------------------------------------ */ | |||
/** | |||
* Set the destination directory into which the JSP source | |||
* files should be compiled. | |||
*/ | |||
public void setDestdir(File destDir) { | |||
this.destDir = destDir; | |||
} | |||
public File getDestdir(){ | |||
return destDir; | |||
} | |||
/* ------------------------------------------------------------ */ | |||
/** | |||
* Set the name of the package the compiled jsp files should be in | |||
*/ | |||
public void setPackage(String pkg){ | |||
this.packageName = pkg; | |||
} | |||
public String getPackage(){ | |||
return packageName; | |||
} | |||
/* ------------------------------------------------------------ */ | |||
/** | |||
* Set the verbose level of the compiler | |||
*/ | |||
public void setVerbose(int i){ | |||
verbose = i; | |||
} | |||
public int getVerbose(){ | |||
return verbose; | |||
} | |||
/* ------------------------------------------------------------ */ | |||
/** | |||
* Throw a BuildException if compilation fails | |||
*/ | |||
public void setFailonerror(boolean fail) { | |||
failOnError = fail; | |||
} | |||
/** | |||
* Gets the failonerror flag. | |||
*/ | |||
public boolean getFailonerror() { | |||
return failOnError; | |||
} | |||
/* ------------------------------------------------------------ */ | |||
public String getIeplugin() | |||
{ | |||
return iepluginid; | |||
} | |||
/** Set the ieplugin id */ | |||
public void setIeplugin(String iepluginid_) | |||
{ | |||
iepluginid = iepluginid_; | |||
} | |||
/* ------------------------------------------------------------ */ | |||
public boolean isMapped() | |||
{ | |||
return mapped; | |||
} | |||
/** set the mapped flag */ | |||
public void setMapped(boolean mapped_) | |||
{ | |||
mapped = mapped_; | |||
} | |||
/* ------------------------------------------------------------ */ | |||
/** Set the classpath to be used for this compilation */ | |||
public void setClasspath(Path cp) { | |||
if (classpath == null) | |||
classpath = cp; | |||
else | |||
classpath.append(cp); | |||
} | |||
/** Maybe creates a nested classpath element. */ | |||
public Path createClasspath() { | |||
if (classpath == null) | |||
classpath = new Path(project); | |||
return classpath.createPath(); | |||
} | |||
/** Adds a reference to a CLASSPATH defined elsewhere */ | |||
public void setClasspathRef(Reference r) { | |||
createClasspath().setRefid(r); | |||
} | |||
public Path getClasspath(){ | |||
return classpath; | |||
} | |||
/* ------------------------------------------------------------ */ | |||
public Vector getCompileList(){ | |||
return compileList; | |||
} | |||
/* ------------------------------------------------------------ */ | |||
public void execute() | |||
throws BuildException | |||
{ | |||
// first off, make sure that we've got a srcdir | |||
if (src == null) { | |||
throw new BuildException("srcdir attribute must be set!", | |||
location); | |||
} | |||
String [] list = src.list(); | |||
if (list.length == 0) { | |||
throw new BuildException("srcdir attribute must be set!", | |||
location); | |||
} | |||
if (destDir != null && !destDir.isDirectory()) { | |||
throw new | |||
BuildException("destination directory \"" + destDir + | |||
"\" does not exist or is not a directory", | |||
location); | |||
} | |||
// calculate where the files will end up: | |||
File dest = null; | |||
if (packageName == null) | |||
dest = destDir; | |||
else { | |||
String path = destDir.getPath() + File.separatorChar + | |||
packageName.replace('.', File.separatorChar); | |||
dest = new File(path); | |||
} | |||
// scan source directories and dest directory to build up both copy | |||
// lists and compile lists | |||
resetFileLists(); | |||
for (int i = 0; i < list.length; i++) { | |||
File srcDir = (File)project.resolveFile(list[i]); | |||
if (!srcDir.exists()) { | |||
throw new BuildException("srcdir \"" + srcDir.getPath() + | |||
"\" does not exist!", location); | |||
} | |||
DirectoryScanner ds = this.getDirectoryScanner(srcDir); | |||
String[] files = ds.getIncludedFiles(); | |||
scanDir(srcDir, dest, files); | |||
} | |||
// compile the source files | |||
String compiler = project.getProperty("jsp.compiler"); | |||
if (compiler == null) { | |||
compiler = "jasper"; | |||
} | |||
if (compileList.size() > 0) { | |||
CompilerAdapter adapter = | |||
CompilerAdapterFactory.getCompiler(compiler, this); | |||
log("Compiling " + compileList.size() + | |||
" source file" | |||
+ (compileList.size() == 1 ? "" : "s") | |||
+ (destDir != null ? " to " + destDir : "")); | |||
// now we need to populate the compiler adapter | |||
adapter.setJspc( this ); | |||
// finally, lets execute the compiler!! | |||
if (!adapter.execute()) { | |||
if (failOnError) { | |||
throw new BuildException(FAIL_MSG, location); | |||
} | |||
else { | |||
log(FAIL_MSG, Project.MSG_ERR); | |||
} | |||
} | |||
} | |||
} | |||
/* ------------------------------------------------------------ */ | |||
/** | |||
* Clear the list of files to be compiled and copied.. | |||
*/ | |||
protected void resetFileLists() { | |||
compileList.removeAllElements(); | |||
} | |||
/* ------------------------------------------------------------ */ | |||
/** | |||
* Scans the directory looking for source files to be compiled. | |||
* The results are returned in the class variable compileList | |||
*/ | |||
protected void scanDir(File srcDir, File destDir, String files[]) { | |||
long now = (new Date()).getTime(); | |||
for (int i = 0; i < files.length; i++) { | |||
File srcFile = new File(srcDir, files[i]); | |||
if (files[i].endsWith(".jsp")) { | |||
// drop leading path (if any) | |||
int fileStart = | |||
files[i].lastIndexOf(File.separatorChar) + 1; | |||
File javaFile = new File(destDir, files[i].substring(fileStart, | |||
files[i].indexOf(".jsp")) + ".java"); | |||
if (srcFile.lastModified() > now) { | |||
log("Warning: file modified in the future: " + | |||
files[i], Project.MSG_WARN); | |||
} | |||
if (!javaFile.exists() || | |||
srcFile.lastModified() > javaFile.lastModified()) | |||
{ | |||
if (!javaFile.exists()) { | |||
log("Compiling " + srcFile.getPath() + | |||
" because java file " | |||
+ javaFile.getPath() + " does not exist", | |||
Project.MSG_DEBUG); | |||
} else { | |||
log("Compiling " + srcFile.getPath() + | |||
" because it is out of date with respect to " | |||
+ javaFile.getPath(), Project.MSG_DEBUG); | |||
} | |||
compileList.addElement(srcFile.getAbsolutePath()); | |||
} | |||
} | |||
} | |||
} | |||
/* ------------------------------------------------------------ */ | |||
} |
@@ -0,0 +1,86 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.jsp.compilers; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.taskdefs.optional.jsp.JspC; | |||
/** | |||
* The interface that all jsp compiler adapters must adher to. | |||
* | |||
* <p>A compiler adapter is an adapter that interprets the jspc's | |||
* parameters in preperation to be passed off to the compier this | |||
* adapter represents. As all the necessary values are stored in the | |||
* Jspc task itself, the only thing all adapters need is the jsp | |||
* task, the execute command and a parameterless constructor (for | |||
* reflection).</p> | |||
* | |||
* @author Jay Dickon Glanville <a href="mailto:jayglanville@home.com">jayglanville@home.com</a> | |||
* @author Matthew Watson <a href="mailto:mattw@i3sp.com">mattw@i3sp.com</a> | |||
*/ | |||
public interface CompilerAdapter { | |||
/** | |||
* Sets the compiler attributes, which are stored in the Jspc task. | |||
*/ | |||
public void setJspc( JspC attributes ); | |||
/** | |||
* Executes the task. | |||
* | |||
* @return has the compilation been successful | |||
*/ | |||
public boolean execute() throws BuildException; | |||
} |
@@ -0,0 +1,125 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.jsp.compilers; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.Task; | |||
import org.apache.tools.ant.Project; | |||
/** | |||
* Creates the necessary compiler adapter, given basic criteria. | |||
* | |||
* @author <a href="mailto:jayglanville@home.com">J D Glanville</a> | |||
* @author Matthew Watson <a href="mailto:mattw@i3sp.com">mattw@i3sp.com</a> | |||
*/ | |||
public class CompilerAdapterFactory { | |||
/** This is a singlton -- can't create instances!! */ | |||
private CompilerAdapterFactory() { | |||
} | |||
/** | |||
* Based on the parameter passed in, this method creates the necessary | |||
* factory desired. | |||
* | |||
* The current mapping for compiler names are as follows: | |||
* <ul><li>jasper = jasper compiler (the default) | |||
* <li><i>a fully quallified classname</i> = the name of a jsp compiler | |||
* adapter | |||
* </ul> | |||
* | |||
* @param compilerType either the name of the desired compiler, or the | |||
* full classname of the compiler's adapter. | |||
* @param task a task to log through. | |||
* @throws BuildException if the compiler type could not be resolved into | |||
* a compiler adapter. | |||
*/ | |||
public static CompilerAdapter getCompiler( String compilerType, Task task ) | |||
throws BuildException { | |||
/* If I've done things right, this should be the extent of the | |||
* conditional statements required. | |||
*/ | |||
if ( compilerType.equalsIgnoreCase("jasper") ) { | |||
return new JasperC(); | |||
} | |||
return resolveClassName( compilerType ); | |||
} | |||
/** | |||
* Tries to resolve the given classname into a compiler adapter. | |||
* Throws a fit if it can't. | |||
* | |||
* @param className The fully qualified classname to be created. | |||
* @throws BuildException This is the fit that is thrown if className | |||
* isn't an instance of CompilerAdapter. | |||
*/ | |||
private static CompilerAdapter resolveClassName( String className ) | |||
throws BuildException { | |||
try { | |||
Class c = Class.forName( className ); | |||
Object o = c.newInstance(); | |||
return (CompilerAdapter) o; | |||
} catch ( ClassNotFoundException cnfe ) { | |||
throw new BuildException( className + " can\'t be found.", cnfe ); | |||
} catch ( ClassCastException cce ) { | |||
throw new BuildException(className + " isn\'t the classname of " | |||
+ "a compiler adapter.", cce); | |||
} catch ( Throwable t ) { | |||
// for all other possibilities | |||
throw new BuildException(className + " caused an interesting " | |||
+ "exception.", t); | |||
} | |||
} | |||
} |
@@ -0,0 +1,115 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.jsp.compilers; | |||
import org.apache.tools.ant.*; | |||
import org.apache.tools.ant.taskdefs.optional.*; | |||
import org.apache.tools.ant.taskdefs.optional.jsp.JspC; | |||
import org.apache.tools.ant.types.*; | |||
import java.util.Vector; | |||
import java.util.Enumeration; | |||
/** | |||
* This is the default implementation for the CompilerAdapter interface. | |||
* This is currently very light on the ground since only one compiler type is | |||
* supported. | |||
* | |||
* @author Matthew Watson <a href="mailto:mattw@i3sp.com">mattw@i3sp.com</a> | |||
*/ | |||
public abstract class DefaultCompilerAdapter | |||
implements CompilerAdapter | |||
{ | |||
/* ------------------------------------------------------------ */ | |||
private static String lSep = System.getProperty("line.separator"); | |||
/* ------------------------------------------------------------ */ | |||
/** | |||
* Logs the compilation parameters, adds the files to compile and logs the | |||
* &qout;niceSourceList" | |||
*/ | |||
protected void logAndAddFilesToCompile(JspC jspc, | |||
Vector compileList, | |||
Commandline cmd) | |||
{ | |||
jspc.log("Compilation args: " + cmd.toString(), Project.MSG_VERBOSE); | |||
StringBuffer niceSourceList = new StringBuffer("File"); | |||
if (compileList.size() != 1) { | |||
niceSourceList.append("s"); | |||
} | |||
niceSourceList.append(" to be compiled:"); | |||
niceSourceList.append(lSep); | |||
Enumeration enum = compileList.elements(); | |||
while (enum.hasMoreElements()) { | |||
String arg = (String)enum.nextElement(); | |||
cmd.createArgument().setValue(arg); | |||
niceSourceList.append(" " + arg + lSep); | |||
} | |||
jspc.log(niceSourceList.toString(), Project.MSG_VERBOSE); | |||
} | |||
/* ------------------------------------------------------------ */ | |||
protected JspC attributes; | |||
public void setJspc( JspC attributes ) { | |||
this.attributes = attributes; | |||
} | |||
public JspC getJspc() { | |||
return attributes; | |||
} | |||
/* ------------------------------------------------------------ */ | |||
} | |||
@@ -0,0 +1,128 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.jsp.compilers; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.Project; | |||
import org.apache.tools.ant.types.*; | |||
import org.apache.tools.ant.taskdefs.optional.jsp.JspC; | |||
import org.apache.tools.ant.taskdefs.*; | |||
/** | |||
* The implementation of the jasper compiler. | |||
* This is a cut-and-paste of the original Jspc task. | |||
* | |||
* @author Matthew Watson <a href="mailto:mattw@i3sp.com">mattw@i3sp.com</a> | |||
*/ | |||
public class JasperC extends DefaultCompilerAdapter | |||
{ | |||
/* ------------------------------------------------------------ */ | |||
public boolean execute() | |||
throws BuildException | |||
{ | |||
getJspc().log("Using jasper compiler", Project.MSG_VERBOSE); | |||
Commandline cmd = setupJasperCommand(); | |||
try { | |||
// Create an instance of the compiler, redirecting output to | |||
// the project log | |||
Java java = (Java)(getJspc().getProject()).createTask("java"); | |||
if (getJspc().getClasspath() != null) | |||
java.setClasspath(getJspc().getClasspath()); | |||
java.setClassname("org.apache.jasper.JspC"); | |||
String args[] = cmd.getArguments(); | |||
for (int i =0; i < args.length; i++) | |||
java.createArg().setValue(args[i]); | |||
java.setFailonerror(true); | |||
java.execute(); | |||
return true; | |||
} | |||
catch (Exception ex) { | |||
if (ex instanceof BuildException) { | |||
throw (BuildException) ex; | |||
} else { | |||
throw new BuildException("Error running jsp compiler: ", | |||
ex, getJspc().getLocation()); | |||
} | |||
} | |||
} | |||
/* ------------------------------------------------------------ */ | |||
private Commandline setupJasperCommand() { | |||
Commandline cmd = new Commandline(); | |||
JspC jspc = getJspc(); | |||
if (jspc.getDestdir() != null) { | |||
cmd.createArgument().setValue("-d"); | |||
cmd.createArgument().setFile(jspc.getDestdir()); | |||
} | |||
if (jspc.getPackage() != null){ | |||
cmd.createArgument().setValue("-p"); | |||
cmd.createArgument().setValue(jspc.getPackage()); | |||
} | |||
if (jspc.getVerbose() != 0) { | |||
cmd.createArgument().setValue("-v" + jspc.getVerbose()); | |||
} | |||
if (jspc.isMapped()){ | |||
cmd.createArgument().setValue("-mapped"); | |||
} | |||
if (jspc.getIeplugin() != null){ | |||
cmd.createArgument().setValue("-ieplugin"); | |||
cmd.createArgument().setValue(jspc.getIeplugin()); | |||
} | |||
logAndAddFilesToCompile(getJspc(), getJspc().getCompileList(), cmd); | |||
return cmd; | |||
} | |||
/* ------------------------------------------------------------ */ | |||
} |