code: void compileClass(Source javaSource, Source javaClass,
                      String sourcePath, boolean isMake)
      throws ClassNotFoundException
    {
      try {
        JavaCompilerUtil compiler = JavaCompilerUtil.create(getClassLoader());
        compiler.setClassDir(_classDir);
        compiler.setSourceDir(_sourceDir);
        if (_encoding != null)
          compiler.setEncoding(_encoding);
        compiler.setArgs(_args);
        compiler.setCompileParent(! isMake);
        compiler.setSourceExtension(_sourceExt);
        if (_compiler != null)
          compiler.setCompiler(_compiler);
  
        //LineMap lineMap = new LineMap(javaFile.getNativePath());
        // The context path is obvious from the browser url
        //lineMap.add(name.replace('.', '/') + _sourceExt, 1, 1);
  
        // Force this into a relative path so different compilers will work
        String prefix = _sourceDir.getPath();
        String full = javaSource.getPath();
  
        String source;
        if (full.startsWith(prefix)) {
          source = full.substring(prefix.length());
          if (source.startsWith("/"))
            source = source.substring(1);
        }
        else
          source = javaSource.getPath();
  
        /*
        if (javaSource.canRead() && javaClass.exists())
          javaClass.remove();
        */
            
        compiler.compileIfModified(source, null);
      } catch (Exception e) {
        //getClassLoader().addDependency(new Depend(javaSource));
  
        log.log(Level.FINEST, e.toString(), e);
  
        // Compile errors are wrapped in a special ClassNotFound class
        // so the server can give a nice error message
        throw new CompileClassNotFound(e);
      }
    }
docs: Compile the Java source.  Compile errors are encapsulated in a
  ClassNotFound wrapper.
  
  @param javaSource path to the Java source