📄 groovyc.java
字号:
*/ 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 + -