⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 groovyc.java

📁 大名鼎鼎的java动态脚本语言。已经通过了sun的认证
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     */    public void setClasspath(Path classpath) {        if (compileClasspath == null) {            compileClasspath = classpath;        }        else {            compileClasspath.append(classpath);        }    }    /**     * Gets the classpath to be used for this compilation.     * @return the class path     */    public Path getClasspath() {        return compileClasspath;    }    /**     * Adds a path to the classpath.     * @return a class path to be configured     */    public Path createClasspath() {        if (compileClasspath == null) {            compileClasspath = new Path(getProject());        }        return compileClasspath.createPath();    }    /**     * Adds a reference to a classpath defined elsewhere.     * @param r a reference to a classpath     */    public void setClasspathRef(Reference r) {        createClasspath().setRefid(r);    }    public String createEncoding() {        if (encoding == null) {            encoding = System.getProperty("file.encoding");        }        return encoding;    }    public void setEncoding(String encoding) {        this.encoding = encoding;    }    public String getEncoding() {        return encoding;    }    /**     * If true, list the source files being handed off to the compiler.     * @param list if true list the source files     */    public void setListfiles(boolean list) {        listFiles = list;    }    /**     * Get the listfiles flag.     * @return the listfiles flag     */    public boolean getListfiles() {        return listFiles;    }    /**     * Indicates whether the build will continue     * even if there are compilation errors; defaults to true.     * @param fail if true halt the build on failure     */    public void setFailonerror(boolean fail) {        failOnError = fail;    }    /**     * @ant.attribute ignore="true"     * @param proceed inverse of failoferror     */    public void setProceed(boolean proceed) {        failOnError = !proceed;    }    /**     * Gets the failonerror flag.     * @return the failonerror flag     */    public boolean getFailonerror() {        return failOnError;    }    /**     * Executes the task.     * @exception BuildException if an error occurs     */    public void execute() throws BuildException {        checkParameters();        resetFileLists();        // scan source directories and dest directory to build up        // compile lists        String[] list = src.list();        for (int i = 0; i < list.length; i++) {            File srcDir = getProject().resolveFile(list[i]);            if (!srcDir.exists()) {                throw new BuildException("srcdir \"" + srcDir.getPath() + "\" does not exist!", getLocation());            }            DirectoryScanner ds = this.getDirectoryScanner(srcDir);            String[] files = ds.getIncludedFiles();            scanDir(srcDir, destDir != null ? destDir : srcDir, files);        }        compile();    }    /**     * Clear the list of files to be compiled and copied..     */    protected void resetFileLists() {        compileList = new File[0];    }    /**     * Scans the directory looking for source files to be compiled.     * The results are returned in the class variable compileList     *     * @param srcDir   The source directory     * @param destDir  The destination directory     * @param files    An array of filenames     */    protected void scanDir(File srcDir, File destDir, String[] files) {        GlobPatternMapper m = new GlobPatternMapper();        m.setFrom("*.groovy");        m.setTo("*.class");        SourceFileScanner sfs = new SourceFileScanner(this);        File[] newFiles = sfs.restrictAsFiles(files, srcDir, destDir, m);        if (newFiles.length > 0) {            File[] newCompileList = new File[compileList.length + newFiles.length];            System.arraycopy(compileList, 0, newCompileList, 0, compileList.length);            System.arraycopy(newFiles, 0, newCompileList, compileList.length, newFiles.length);            compileList = newCompileList;        }    }    /**     * Gets the list of files to be compiled.     * @return the list of files as an array     */    public File[] getFileList() {        return compileList;    }    protected void checkParameters() throws BuildException {        if (src == null) {            throw new BuildException("srcdir attribute must be set!", getLocation());        }        if (src.size() == 0) {            throw new BuildException("srcdir attribute must be set!", getLocation());        }        if (destDir != null && !destDir.isDirectory()) {            throw new BuildException(                "destination directory \"" + destDir + "\" does not exist " + "or is not a directory",                getLocation());        }        if (encoding != null && !Charset.isSupported(encoding)) {            throw new BuildException("encoding \"\" not supported");        }    }    protected void compile() {        if (compileList.length > 0) {            log(                "Compiling "                    + compileList.length                    + " source file"                    + (compileList.length == 1 ? "" : "s")                    + (destDir != null ? " to " + destDir : ""));            if (listFiles) {                for (int i = 0; i < compileList.length; i++) {                    String filename = compileList[i].getAbsolutePath();                    // TODO this logging does not seem to appear in the maven build??                    // COMMENT Hein: This is not ant's problem;                    // fix it in maven instead if you really need this from maven!                    log(filename);//                    System.out.println("compiling: " + filename);                }            }            try {                Path classpath = getClasspath();                if (classpath != null) {                    configuration.setClasspath(classpath.toString());                }                configuration.setTargetDirectory(destDir);                if (encoding != null) {                    configuration.setSourceEncoding(encoding);                }                CompilationUnit unit = new CompilationUnit(configuration, null, buildClassLoaderFor());                unit.addSources(compileList);                unit.compile();            }            catch (Exception e) {                StringWriter writer = new StringWriter();                new ErrorReporter( e, false ).write( new PrintWriter(writer) );                String message = writer.toString();                if (failOnError) {                    throw new BuildException(message, e, getLocation());                }                else {                    log(message, Project.MSG_ERR);                }            }        }    }    private GroovyClassLoader buildClassLoaderFor() {        ClassLoader parent = this.getClass().getClassLoader();        if (parent instanceof AntClassLoader) {            AntClassLoader antLoader = (AntClassLoader) parent;            String[] pathElm = antLoader.getClasspath().split(File.pathSeparator);            List classpath = configuration.getClasspath();            /*             * Iterate over the classpath provided to groovyc, and add any missing path             * entries to the AntClassLoader.  This is a workaround, since for some reason             * 'directory' classpath entries were not added to the AntClassLoader' classpath.              */            for (Iterator iter = classpath.iterator(); iter.hasNext();) {                String cpEntry = (String) iter.next();                boolean found = false;                for (int i = 0; i < pathElm.length; i++) {                    if (cpEntry.equals(pathElm[i])) {                        found = true;                        break;                    }                }                if (!found)                    antLoader.addPathElement(cpEntry);            }        }        return new GroovyClassLoader(parent, configuration);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -