Search in sources :

Example 1 with Javac

use of org.apache.tools.ant.taskdefs.Javac in project tomcat by apache.

the class AntCompiler method generateClass.

// --------------------------------------------------------- Public Methods
/**
     * Compile the servlet from .java file to .class file
     */
@Override
protected void generateClass(String[] smap) throws FileNotFoundException, JasperException, Exception {
    long t1 = 0;
    if (log.isDebugEnabled()) {
        t1 = System.currentTimeMillis();
    }
    String javaEncoding = ctxt.getOptions().getJavaEncoding();
    String javaFileName = ctxt.getServletJavaFileName();
    String classpath = ctxt.getClassPath();
    StringBuilder errorReport = new StringBuilder();
    StringBuilder info = new StringBuilder();
    info.append("Compile: javaFileName=" + javaFileName + "\n");
    info.append("    classpath=" + classpath + "\n");
    // Start capturing the System.err output for this thread
    SystemLogHandler.setThread();
    // Initializing javac task
    getProject();
    Javac javac = (Javac) project.createTask("javac");
    // Initializing classpath
    Path path = new Path(project);
    path.setPath(System.getProperty("java.class.path"));
    info.append("    cp=" + System.getProperty("java.class.path") + "\n");
    StringTokenizer tokenizer = new StringTokenizer(classpath, File.pathSeparator);
    while (tokenizer.hasMoreElements()) {
        String pathElement = tokenizer.nextToken();
        File repository = new File(pathElement);
        path.setLocation(repository);
        info.append("    cp=" + repository + "\n");
    }
    if (log.isDebugEnabled()) {
        log.debug("Using classpath: " + System.getProperty("java.class.path") + File.pathSeparator + classpath);
    }
    // Initializing sourcepath
    Path srcPath = new Path(project);
    srcPath.setLocation(options.getScratchDir());
    info.append("    work dir=" + options.getScratchDir() + "\n");
    // Initialize and set java extensions
    String exts = System.getProperty("java.ext.dirs");
    if (exts != null) {
        Path extdirs = new Path(project);
        extdirs.setPath(exts);
        javac.setExtdirs(extdirs);
        info.append("    extension dir=" + exts + "\n");
    }
    // See Bugzilla 31257
    if (ctxt.getOptions().getFork()) {
        String endorsed = System.getProperty("java.endorsed.dirs");
        if (endorsed != null) {
            Javac.ImplementationSpecificArgument endorsedArg = javac.createCompilerArg();
            endorsedArg.setLine("-J-Djava.endorsed.dirs=" + quotePathList(endorsed));
            info.append("    endorsed dir=" + quotePathList(endorsed) + "\n");
        } else {
            info.append("    no endorsed dirs specified\n");
        }
    }
    // Configure the compiler object
    javac.setEncoding(javaEncoding);
    javac.setClasspath(path);
    javac.setDebug(ctxt.getOptions().getClassDebugInfo());
    javac.setSrcdir(srcPath);
    javac.setTempdir(options.getScratchDir());
    javac.setOptimize(!ctxt.getOptions().getClassDebugInfo());
    javac.setFork(ctxt.getOptions().getFork());
    info.append("    srcDir=" + srcPath + "\n");
    // Set the Java compiler to use
    if (options.getCompiler() != null) {
        javac.setCompiler(options.getCompiler());
        info.append("    compiler=" + options.getCompiler() + "\n");
    }
    if (options.getCompilerTargetVM() != null) {
        javac.setTarget(options.getCompilerTargetVM());
        info.append("   compilerTargetVM=" + options.getCompilerTargetVM() + "\n");
    }
    if (options.getCompilerSourceVM() != null) {
        javac.setSource(options.getCompilerSourceVM());
        info.append("   compilerSourceVM=" + options.getCompilerSourceVM() + "\n");
    }
    // Build includes path
    PatternSet.NameEntry includes = javac.createInclude();
    includes.setName(ctxt.getJavaPath());
    info.append("    include=" + ctxt.getJavaPath() + "\n");
    BuildException be = null;
    try {
        if (ctxt.getOptions().getFork()) {
            javac.execute();
        } else {
            synchronized (javacLock) {
                javac.execute();
            }
        }
    } catch (BuildException e) {
        be = e;
        log.error(Localizer.getMessage("jsp.error.javac"), e);
        log.error(Localizer.getMessage("jsp.error.javac.env") + info.toString());
    }
    errorReport.append(logger.getReport());
    // Stop capturing the System.err output for this thread
    String errorCapture = SystemLogHandler.unsetThread();
    if (errorCapture != null) {
        errorReport.append(System.lineSeparator());
        errorReport.append(errorCapture);
    }
    if (!ctxt.keepGenerated()) {
        File javaFile = new File(javaFileName);
        javaFile.delete();
    }
    if (be != null) {
        String errorReportString = errorReport.toString();
        log.error(Localizer.getMessage("jsp.error.compilation", javaFileName, errorReportString));
        JavacErrorDetail[] javacErrors = ErrorDispatcher.parseJavacErrors(errorReportString, javaFileName, pageNodes);
        if (javacErrors != null) {
            errDispatcher.javacError(javacErrors);
        } else {
            errDispatcher.javacError(errorReportString, be);
        }
    }
    if (log.isDebugEnabled()) {
        long t2 = System.currentTimeMillis();
        log.debug("Compiled " + ctxt.getServletJavaFileName() + " " + (t2 - t1) + "ms");
    }
    logger = null;
    project = null;
    if (ctxt.isPrototypeMode()) {
        return;
    }
    // JSR45 Support
    if (!options.isSmapSuppressed()) {
        SmapUtil.installSmap(smap);
    }
}
Also used : Path(org.apache.tools.ant.types.Path) Javac(org.apache.tools.ant.taskdefs.Javac) StringTokenizer(java.util.StringTokenizer) BuildException(org.apache.tools.ant.BuildException) File(java.io.File) PatternSet(org.apache.tools.ant.types.PatternSet)

Aggregations

File (java.io.File)1 StringTokenizer (java.util.StringTokenizer)1 BuildException (org.apache.tools.ant.BuildException)1 Javac (org.apache.tools.ant.taskdefs.Javac)1 Path (org.apache.tools.ant.types.Path)1 PatternSet (org.apache.tools.ant.types.PatternSet)1