看看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>
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)
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();
}
*/
}//
Run Code Online (Sandbox Code Playgroud)
UPDATE
正如评论中所建议的那样,我将excludesfile name属性更改为srcdir的相对路径,就是这样!所以剪断看起来像:
<javac srcdir="${utilitiesSrc}" destdir="${dest}">
<excludesfile name="HTMLParser.java" />
</javac>
Run Code Online (Sandbox Code Playgroud)
尝试将该exclude路径指定为相对于javac srcdir(=${utilitiesSrc})目录的路径.
例如,您的上一个javac任务将是:
<javac srcdir="${utilitiesSrc}" destdir="${dest}">
<exclude name="HTMLParser.java" />
</javac>
Run Code Online (Sandbox Code Playgroud)
如果文件隐藏在目录下的${utilitiesSrc}子目录中的某个位置,则可以将其与通配符匹配:
<javac srcdir="${utilitiesSrc}" destdir="${dest}">
<exclude name="**/HTMLParser.java" />
</javac>
Run Code Online (Sandbox Code Playgroud)
我想你已经检查过的显而易见的事情是,你正在编译的任何内容都没有依赖于HTMLParser.如果是这种情况,javac命令将反正编译该文件.
为了澄清,上面的问题是使用带有exclude属性的绝对路径.当给出srcdir时,ant会创建一个带有排除文件名的隐式路径.
| 归档时间: |
|
| 查看次数: |
12254 次 |
| 最近记录: |