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

📄 executeon.java

📁 Use the links below to download a source distribution of Ant from one of our mirrors. It is good pra
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                    String[] s = getDirs(base, ds);                    for (int j = 0; j < s.length; j++) {                        totalDirs++;                        fileNames.addElement(s[j]);                        baseDirs.addElement(base);                    }                }                if (fileNames.size() == 0 && skipEmpty) {                    logSkippingFileset(currentType, ds, base);                    continue;                }                if (!parallel) {                    String[] s = new String[fileNames.size()];                    fileNames.copyInto(s);                    for (int j = 0; j < s.length; j++) {                        String[] command = getCommandline(s[j], base);                        log(Commandline.describeCommand(command),                            Project.MSG_VERBOSE);                        exe.setCommandline(command);                        if (redirectorElement != null) {                            setupRedirector();                            redirectorElement.configure(redirector, s[j]);                        }                        if (redirectorElement != null || haveExecuted) {                            // need to reset the stream handler to restart                            // reading of pipes;                            // go ahead and do it always w/ nested redirectors                            exe.setStreamHandler(redirector.createHandler());                        }                        runExecute(exe);                        haveExecuted = true;                    }                    fileNames.removeAllElements();                    baseDirs.removeAllElements();                }            }            if (resources != null) {                Iterator iter = resources.iterator();                while (iter.hasNext()) {                    Resource res = (Resource) iter.next();                    if (!res.isExists() && ignoreMissing) {                        continue;                    }                    File base = null;                    String name = res.getName();                    if (res instanceof FileResource) {                        FileResource fr = (FileResource) res;                        base = fr.getBaseDir();                        if (base == null) {                            name = fr.getFile().getAbsolutePath();                        }                    }                    if (restrict(new String[] {name}, base).length == 0) {                        continue;                    }                    if ((!res.isDirectory() || !res.isExists())                        && !FileDirBoth.DIR.equals(type)) {                        totalFiles++;                    } else if (res.isDirectory()                               && !FileDirBoth.FILE.equals(type)) {                        totalDirs++;                    } else {                        continue;                    }                    baseDirs.add(base);                    fileNames.add(name);                    if (!parallel) {                        String[] command = getCommandline(name, base);                        log(Commandline.describeCommand(command),                            Project.MSG_VERBOSE);                        exe.setCommandline(command);                        if (redirectorElement != null) {                            setupRedirector();                            redirectorElement.configure(redirector, name);                        }                        if (redirectorElement != null || haveExecuted) {                            // need to reset the stream handler to restart                            // reading of pipes;                            // go ahead and do it always w/ nested redirectors                            exe.setStreamHandler(redirector.createHandler());                        }                        runExecute(exe);                        haveExecuted = true;                        fileNames.removeAllElements();                        baseDirs.removeAllElements();                    }                }            }            if (parallel && (fileNames.size() > 0 || !skipEmpty)) {                runParallel(exe, fileNames, baseDirs);                haveExecuted = true;            }            if (haveExecuted) {                log("Applied " + cmdl.getExecutable() + " to "                    + totalFiles + " file"                    + (totalFiles != 1 ? "s" : "") + " and "                    + totalDirs + " director"                    + (totalDirs != 1 ? "ies" : "y") + ".",                    verbose ? Project.MSG_INFO : Project.MSG_VERBOSE);            }        } catch (IOException e) {            throw new BuildException("Execute failed: " + e, e, getLocation());        } finally {            // close the output file if required            logFlush();            redirector.setAppendProperties(false);            redirector.setProperties();        }    }    /**     * log a message for skipping a fileset.     * @param currentType the current type.     * @param ds the directory scanner.     * @param base the dir base     */    private void logSkippingFileset(        String currentType, DirectoryScanner ds, File base) {        int includedCount            = ((!FileDirBoth.DIR.equals(currentType))               ? ds.getIncludedFilesCount() : 0)            + ((!FileDirBoth.FILE.equals(currentType))               ? ds.getIncludedDirsCount() : 0);        log("Skipping fileset for directory " + base + ". It is "            + ((includedCount > 0) ? "up to date." : "empty."),             verbose ? Project.MSG_INFO : Project.MSG_VERBOSE);    }    /**     * Construct the command line for parallel execution.     *     * @param srcFiles The filenames to add to the commandline.     * @param baseDirs filenames are relative to this dir.     * @return the command line in the form of a String[].     */    protected String[] getCommandline(String[] srcFiles, File[] baseDirs) {        final char fileSeparator = File.separatorChar;        Vector targets = new Vector();        if (targetFilePos != null) {            Hashtable addedFiles = new Hashtable();            for (int i = 0; i < srcFiles.length; i++) {                String[] subTargets = mapper.mapFileName(srcFiles[i]);                if (subTargets != null) {                    for (int j = 0; j < subTargets.length; j++) {                        String name = null;                        if (!relative) {                            name = (new File(destDir, subTargets[j])).getAbsolutePath();                        } else {                            name = subTargets[j];                        }                        if (forwardSlash && fileSeparator != '/') {                            name = name.replace(fileSeparator, '/');                        }                        if (!addedFiles.contains(name)) {                            targets.addElement(name);                            addedFiles.put(name, name);                        }                    }                }            }        }        String[] targetFiles = new String[targets.size()];        targets.copyInto(targetFiles);        if (!addSourceFile) {            srcFiles = new String[0];        }        String[] orig = cmdl.getCommandline();        String[] result            = new String[orig.length + srcFiles.length + targetFiles.length];        int srcIndex = orig.length;        if (srcFilePos != null) {            srcIndex = srcFilePos.getPosition();        }        if (targetFilePos != null) {            int targetIndex = targetFilePos.getPosition();            if (srcIndex < targetIndex                || (srcIndex == targetIndex && srcIsFirst)) {                // 0 --> srcIndex                System.arraycopy(orig, 0, result, 0, srcIndex);                // srcIndex --> targetIndex                System.arraycopy(orig, srcIndex, result,                                 srcIndex + srcFiles.length,                                 targetIndex - srcIndex);                // targets are already absolute file names                System.arraycopy(targetFiles, 0, result,                                 targetIndex + srcFiles.length,                                 targetFiles.length);                // targetIndex --> end                System.arraycopy(orig, targetIndex, result,                    targetIndex + srcFiles.length + targetFiles.length,                    orig.length - targetIndex);            } else {                // 0 --> targetIndex                System.arraycopy(orig, 0, result, 0, targetIndex);                // targets are already absolute file names                System.arraycopy(targetFiles, 0, result,                                 targetIndex,                                 targetFiles.length);                // targetIndex --> srcIndex                System.arraycopy(orig, targetIndex, result,                                 targetIndex + targetFiles.length,                                 srcIndex - targetIndex);                // srcIndex --> end                System.arraycopy(orig, srcIndex, result,                    srcIndex + srcFiles.length + targetFiles.length,                    orig.length - srcIndex);                srcIndex += targetFiles.length;            }        } else { // no targetFilePos            // 0 --> srcIndex            System.arraycopy(orig, 0, result, 0, srcIndex);            // srcIndex --> end            System.arraycopy(orig, srcIndex, result,                             srcIndex + srcFiles.length,                             orig.length - srcIndex);        }        // fill in source file names        for (int i = 0; i < srcFiles.length; i++) {            if (!relative) {                result[srcIndex + i] =                    (new File(baseDirs[i], srcFiles[i])).getAbsolutePath();            } else {                result[srcIndex + i] = srcFiles[i];            }            if (forwardSlash && fileSeparator != '/') {                result[srcIndex + i] =                    result[srcIndex + i].replace(fileSeparator, '/');            }        }        return result;    }    /**     * Construct the command line for serial execution.     *     * @param srcFile The filename to add to the commandline.     * @param baseDir filename is relative to this dir.     * @return the command line in the form of a String[].     */    protected String[] getCommandline(String srcFile, File baseDir) {        return getCommandline(new String[] {srcFile}, new File[] {baseDir});    }    /**     * Return the list of files from this DirectoryScanner that should     * be included on the command line.     * @param baseDir the File base directory.     * @param ds the DirectoryScanner to use for file scanning.     * @return a String[] containing the filenames.     */    protected String[] getFiles(File baseDir, DirectoryScanner ds) {        return restrict(ds.getIncludedFiles(), baseDir);    }    /**     * Return the list of Directories from this DirectoryScanner that     * should be included on the command line.     * @param baseDir the File base directory.     * @param ds the DirectoryScanner to use for file scanning.     * @return a String[] containing the directory names.     */    protected String[] getDirs(File baseDir, DirectoryScanner ds) {        return restrict(ds.getIncludedDirectories(), baseDir);    }    /**     * Return the list of files or directories from this FileList that     * should be included on the command line.     * @param list the FileList to check.     * @return a String[] containing the directory names.     *     * @since Ant 1.6.2     */    protected String[] getFilesAndDirs(FileList list) {        return restrict(list.getFiles(getProject()), list.getDir(getProject()));    }    private String[] restrict(String[] s, File baseDir) {        return (mapper == null || force) ? s            : new SourceFileScanner(this).restrict(s, baseDir, destDir, mapper);    }    /**     * Run the command in "parallel" mode, making sure that at most     * maxParallel sourcefiles get passed on the command line.     * @param exe the Executable to use.     * @param fileNames the Vector of filenames.     * @param baseDirs the Vector of base directories corresponding to fileNames.     * @throws IOException  on I/O errors.     * @throws BuildException on other errors.     * @since Ant 1.6     */    protected void runParallel(Execute exe, Vector fileNames,                               Vector baseDirs)        throws IOException, BuildException {        String[] s = new String[fileNames.size()];        fileNames.copyInto(s);        File[] b = new File[baseDirs.size()];        baseDirs.copyInto(b);        if (maxParallel <= 0            || s.length == 0 /* this is skipEmpty == false */) {            String[] command = getCommandline(s, b);            log(Commandline.describeCommand(command), Project.MSG_VERBOSE);            exe.setCommandline(command);            runExecute(exe);        } else {            int stillToDo = fileNames.size();            int currentOffset = 0;            while (stillToDo > 0) {                int currentAmount = Math.min(stillToDo, maxParallel);                String[] cs = new String[currentAmount];                System.arraycopy(s, currentOffset, cs, 0, currentAmount);                File[] cb = new File[currentAmount];                System.arraycopy(b, currentOffset, cb, 0, currentAmount);                String[] command = getCommandline(cs, cb);                log(Commandline.describeCommand(command), Project.MSG_VERBOSE);                exe.setCommandline(command);                if (redirectorElement != null) {                    setupRedirector();                    redirectorElement.configure(redirector, null);                }                if (redirectorElement != null || currentOffset > 0) {                    // need to reset the stream handler to restart                    // reading of pipes;                    // go ahead and do it always w/ nested redirectors                    exe.setStreamHandler(redirector.createHandler());                }                runExecute(exe);                stillToDo -= currentAmount;                currentOffset += currentAmount;            }        }    }    /**     * Enumerated attribute with the values "file", "dir" and "both"     * for the type attribute.     */    public static class FileDirBoth extends EnumeratedAttribute {        /** File value */        public static final String FILE = "file";        /** Dir value */        public static final String DIR = "dir";        /**         * @see EnumeratedAttribute#getValues         */        /** {@inheritDoc}. */       public String[] getValues() {            return new String[] {FILE, DIR, "both"};        }    }}

⌨️ 快捷键说明

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