Ant排除敏感类文件的最佳方法
经过几次尝试,我发现如果代码中提到这个类,javac将忽略排除列表,如果可以找到它,仍然编译这个类,而不是抛出错误。
我更希望抛出一个错误,而不是用我的敏感类进行编译。
我还注意到条件编译被忽略了,所以如果代码像
static final boolean DEBUG = false;
//interface which TestSensitive & NormalClass implement
ITestWrapper testWrapper = null;
if(DEBUG){
testWrapper = new TestSensitive();
}else{
testWrapper = new NormalClass();
}
testWrapper.print_Msg();
在javac 中的build.xml中
<src path="${source.absolute.dir}" />
<exclude name="**/Test*.java" />
<src path="${gen.absolute.dir}" />
尽管条件编译应该忽略对testWrapper=new TestSensitive()的调用,但TestSensity仍在编译中。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.21
http://www.javapractices.com/topic/TopicAction.do?Id=64
目前,我认为唯一能实现我想要的方法是复制出TestSensitive类,并复制到一个空的伪TestSensitiveclass中。有更好的方法吗。
让我回答这个问题的非蚂蚁部分(无论如何,在你解决它之前,你不能再前进了):
似乎你在自相矛盾,你的DEBUG
就是true
,那么你为什么对TestSensitive
感到好奇呢?选择的是if分支。
然而,我相信对于其他类的引用,在编译类路径时需要有这些类。我相信你不能用这种方式阻止它。
然而,有一些方法可以达到预期的行为。例如:
- 通过反射-您可以使用类的名称加载它,然后实例化/稍后使用它,或者
- 因为您已经有了通用接口
ITestWrapper
:- 并使用类似
Spring
或 - 通过一些类的自我注册(比如监听器)
- 并使用类似