【问题标题】:ANT - how to use exclude, excludesfile with javac?ANT - 如何在 javac 中使用 exclude、excludesfile?
【发布时间】:2015-08-27 21:30:35
【问题描述】:

查看了有关 stackoverflow 的几篇文章以及其他来源(在线 + ANT 定义指南),但到目前为止,它们都没有帮助。我无法从编译中排除该文件。

我只有一个文件要从编译中排除,而 ANT 文档并没有真正说明细节。 我试图从编译中排除HTMLParser.java。 也尝试使用excludesfile。但它仍然符合 HTMLParser.java

我编写了简单的 ANT 来检查下面尝试不同的变体。

谁能告诉我怎么了?

<javac srcdir="${utilitiesSrc}" destdir="${dest}">
      <excludesfile name="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\src\com\masatosan\utilities\HTMLParser.java" />
</javac>

<project 
     name="CompileMasatosan"  
     default="main"
     basedir="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\src\com\masatosan">

     <property name="dest"
    location="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\WEB-INF\classes" />


     <property name="utilitiesSrc" 
        location="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\src\com\masatosan\utilities" />

    <javac srcdir="${utilitiesSrc}" destdir="${dest}">
         <exclude name="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\head_first\src\com\masatosan\utilities\HTMLParser.java" />
    </javac>
</project>

我认为 HTMLParser.java 没有依赖关系,因为我注释掉了除类声明行之外的所有行。

HTMLParser.java

package com.masatosan.utilities;

public class HTMLParser {
/*  commenting out since Eclipse doesn't like some characters :(

    public static final String escapeHTML(String s){
           StringBuffer sb = new StringBuffer();
           int n = s.length();
           for (int i = 0; i < n; i++) {
              char c = s.charAt(i);
              switch (c) {
                 case '<': sb.append("&lt;"); break;
                 case '>': sb.append("&gt;"); break;
                 case '&': sb.append("&amp;"); break;
                 case '"': sb.append("&quot;"); break;
                 case 'à': sb.append("&agrave;");break;
                 case 'À': sb.append("&Agrave;");break;
                 case 'â': sb.append("&acirc;");break;
                 case 'Â': sb.append("&Acirc;");break;
                 case 'ä': sb.append("&auml;");break;
                 case 'Ä': sb.append("&Auml;");break;
                 case 'Ã¥': sb.append("&aring;");break;
                 case 'Ã…': sb.append("&Aring;");break;
                 case 'æ': sb.append("&aelig;");break;
                 case 'Æ': sb.append("&AElig;");break;
                 case 'ç': sb.append("&ccedil;");break;
                 case 'Ç': sb.append("&Ccedil;");break;
                 case 'é': sb.append("&eacute;");break;
                 case 'É': sb.append("&Eacute;");break;
                 case 'è': sb.append("&egrave;");break;
                 case 'È': sb.append("&Egrave;");break;
                 case 'ê': sb.append("&ecirc;");break;
                 case 'Ê': sb.append("&Ecirc;");break;
                 case 'ë': sb.append("&euml;");break;
                 case 'Ë': sb.append("&Euml;");break;
                 case 'ï': sb.append("&iuml;");break;
                 case '�': sb.append("&Iuml;");break;
                 case 'ô': sb.append("&ocirc;");break;
                 case 'Ô': sb.append("&Ocirc;");break;
                 case 'ö': sb.append("&ouml;");break;
                 case 'Ö': sb.append("&Ouml;");break;
                 case 'ø': sb.append("&oslash;");break;
                 case 'Ø': sb.append("&Oslash;");break;
                 case 'ß': sb.append("&szlig;");break;
                 case 'ù': sb.append("&ugrave;");break;
                 case 'Ù': sb.append("&Ugrave;");break;         
                 case 'û': sb.append("&ucirc;");break;         
                 case 'Û': sb.append("&Ucirc;");break;
                 case 'ü': sb.append("&uuml;");break;
                 case 'Ü': sb.append("&Uuml;");break;
                 case '®': sb.append("&reg;");break;         
                 case '©': sb.append("&copy;");break;   
                 case '€': sb.append("&euro;"); break;
                 // be carefull with this one (non-breaking whitee space)
                 case ' ': sb.append("&nbsp;");break;         

                 default:  sb.append(c); break;
              }
           }
           return sb.toString();
    }
    */
}//

更新

正如评论中所建议的,我将 excludesfile name 属性更改为 srcdir 的相对路径,就是这样!所以剪断看起来像:

<javac srcdir="${utilitiesSrc}" destdir="${dest}">
      <excludesfile name="HTMLParser.java" />
</javac>

【问题讨论】:

    标签: java ant javac


    【解决方案1】:

    尝试将exclude 指定为相对于javac srcdir (=${utilitiesSrc}) 目录的路径。

    例如,您的最后一个 javac 任务将是:

    <javac srcdir="${utilitiesSrc}" destdir="${dest}">
        <exclude name="HTMLParser.java" />
    </javac>
    

    如果文件隐藏在${utilitiesSrc} 目录下的某个子目录中,您可以将其与wildcard 匹配:

    <javac srcdir="${utilitiesSrc}" destdir="${dest}">
        <exclude name="**/HTMLParser.java" />
    </javac>
    

    【讨论】:

    • 感谢您的提示!很高兴知道我也可以使用通配符。
    【解决方案2】:

    我想你已经检查过的显而易见的事情是,你正在编译的任何东西都没有依赖于 HTMLParser。如果是这种情况,javac 命令无论如何都会编译该文件。

    为了澄清,上面的问题是使用具有排除属性的绝对路径。当给出 srcdir 时,ant 会创建一个带有排除文件名的隐式路径。

    【讨论】:

    • 据我了解,HTMLParser 中没有依赖项。我注释掉了除了类声明之外的整行,因为 Eclipse 不喜欢文件中的某些字符。
    • 您可能还想尝试使用相对于您的 srcdir 的路径。我不够熟悉,不知道这是否重要,但我看到的所有排除示例都是相对的。 (我的猜测是这不会有任何影响)
    • 确实,正如我刚刚经历的那样。排除了一些无论如何编译的源文件。必须使用第一部分排除源代码的另一部分才能使编译成功。竖起大拇指:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多