diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java new file mode 100644 index 00000000..f0becacb --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java @@ -0,0 +1,182 @@ +/* + * 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.tools.ant.taskdefs.optional.jsp.compilers; + +import java.io.File; + +import org.apache.tools.ant.AntClassLoader; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.taskdefs.Java; +import org.apache.tools.ant.taskdefs.optional.jsp.JspC; +import org.apache.tools.ant.taskdefs.optional.jsp.JspMangler; +import org.apache.tools.ant.types.CommandlineJava; +import org.apache.tools.ant.types.Path; + +/** + * The implementation of the jasper compiler. + * This is a cut-and-paste of the original Jspc task. + * + * @since ant1.5 + */ +public class JasperC extends DefaultJspCompilerAdapter { + + // CheckStyle:VisibilityModifier OFF - bc + + /** + * what produces java classes from .jsp files + */ + JspMangler mangler; + + // CheckStyle:VisibilityModifier ON + + /** + * Constructor for JasperC. + * @param mangler a filename converter + */ + public JasperC(JspMangler mangler) { + this.mangler = mangler; + } + + /** + * Our execute method. + * @return true if successful + * @throws BuildException on error + */ + public boolean execute() + throws BuildException { + getJspc().log("Using jasper compiler", Project.MSG_VERBOSE); + CommandlineJava cmd = setupJasperCommand(); + + try { + // Create an instance of the compiler, redirecting output to + // the project log + Java java = new Java(owner); + Path p = getClasspath(); + if (getJspc().getClasspath() != null) { + getProject().log("using user supplied classpath: " + p, + Project.MSG_DEBUG); + } else { + getProject().log("using system classpath: " + p, + Project.MSG_DEBUG); + } + java.setClasspath(p); + java.setDir(getProject().getBaseDir()); + java.setClassname("org.apache.jasper.JspC"); + //this is really irritating; we need a way to set stuff + String []args = cmd.getJavaCommand().getArguments(); + for (int i = 0; i < args.length; i++) { + java.createArg().setValue(args[i]); + } + java.setFailonerror(getJspc().getFailonerror()); + //we are forking here to be sure that if JspC calls + //System.exit() it doesn't halt the build + java.setFork(true); + java.setTaskName("jasperc"); + 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()); + } + } finally { + getJspc().deleteEmptyJavaFiles(); + } + } + + + + /** + * build up a command line + * @return a command line for jasper + */ + private CommandlineJava setupJasperCommand() { + CommandlineJava cmd = new CommandlineJava(); + JspC jspc = getJspc(); + addArg(cmd, "-d", jspc.getDestdir()); + addArg(cmd, "-p", jspc.getPackage()); + + if (!isTomcat5x()) { + addArg(cmd, "-v" + jspc.getVerbose()); + } else { + getProject().log("this task doesn't support Tomcat 5.x properly, " + + "please use the Tomcat provided jspc task " + + "instead"); + } + + addArg(cmd, "-uriroot", jspc.getUriroot()); + addArg(cmd, "-uribase", jspc.getUribase()); + addArg(cmd, "-ieplugin", jspc.getIeplugin()); + addArg(cmd, "-webinc", jspc.getWebinc()); + addArg(cmd, "-webxml", jspc.getWebxml()); + addArg(cmd, "-die9"); + + if (jspc.isMapped()) { + addArg(cmd, "-mapped"); + } + if (jspc.getWebApp() != null) { + File dir = jspc.getWebApp().getDirectory(); + addArg(cmd, "-webapp", dir); + } + logAndAddFilesToCompile(getJspc(), getJspc().getCompileList(), cmd); + return cmd; + } + + /** + * @return an instance of the mangler this compiler uses + */ + + public JspMangler createMangler() { + return mangler; + } + + /** + * @since Ant 1.6.2 + */ + private Path getClasspath() { + Path p = getJspc().getClasspath(); + if (p == null) { + p = new Path(getProject()); + return p.concatSystemClasspath("only"); + } else { + return p.concatSystemClasspath("ignore"); + } + } + + /** + * @since Ant 1.6.2 + */ + private boolean isTomcat5x() { + AntClassLoader l = null; + try { + l = getProject().createClassLoader(getClasspath()); + l.loadClass("org.apache.jasper.tagplugins.jstl.If"); + return true; + } catch (ClassNotFoundException e) { + return false; + } finally { + if (l != null) { + l.cleanup(); + } + } + } +} |