查看了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("<"); break;
case '>': sb.append(">"); break;
case '&': sb.append("&"); break;
case '"': sb.append("""); break;
case 'Ã ': sb.append("à");break;
case 'À': sb.append("À");break;
case 'â': sb.append("â");break;
case 'Â': sb.append("Â");break;
case 'ä': sb.append("ä");break;
case 'Ä': sb.append("Ä");break;
case 'Ã¥': sb.append("å");break;
case 'Ã…': sb.append("Å");break;
case 'æ': sb.append("æ");break;
case 'Æ': sb.append("Æ");break;
case 'ç': sb.append("ç");break;
case 'Ç': sb.append("Ç");break;
case 'é': sb.append("é");break;
case 'É': sb.append("É");break;
case 'è': sb.append("è");break;
case 'È': sb.append("È");break;
case 'ê': sb.append("ê");break;
case 'Ê': sb.append("Ê");break;
case 'ë': sb.append("ë");break;
case 'Ë': sb.append("Ë");break;
case 'ï': sb.append("ï");break;
case 'Ã�': sb.append("Ï");break;
case 'ô': sb.append("ô");break;
case 'Ô': sb.append("Ô");break;
case 'ö': sb.append("ö");break;
case 'Ö': sb.append("Ö");break;
case 'ø': sb.append("ø");break;
case 'Ø': sb.append("Ø");break;
case 'ß': sb.append("ß");break;
case 'ù': sb.append("ù");break;
case 'Ù': sb.append("Ù");break;
case 'û': sb.append("û");break;
case 'Û': sb.append("Û");break;
case 'ü': sb.append("ü");break;
case 'Ãœ': sb.append("Ü");break;
case '®': sb.append("®");break;
case '©': sb.append("©");break;
case '€': sb.append("€"); break;
// be carefull with this one (non-breaking whitee space)
case ' ': sb.append(" ");break;
default: sb.append(c); break;
}
}
return sb.toString();
}
*/
}//
更新
正如评论中所建议的,我将excludesfile name属性更改为srcdir的相对路径,就是这样!所以剪辑看起来像:
<javac srcdir="${utilitiesSrc}" destdir="${dest}">
<excludesfile name="HTMLParser.java" />
</javac>
答案 0 :(得分:8)
尝试将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>
答案 1 :(得分:5)
我想你已经检查过的明显事实是,你正在编译的任何内容都没有HTMLParser中的依赖项。如果是这种情况,javac命令将反正编译该文件。
为了澄清,上面的问题是使用带有exclude属性的绝对路径。当给出srcdir时,ant会创建一个带有排除文件名的隐式路径。