Ant排除敏感类文件的最佳方法

时间:2013-08-10 02:44:25

标签: ant javac conditional-compilation

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()的调用,TestSensitive仍在编译中。

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类并复制到一个虚拟空洞TestSensitive类中。有没有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

让我回答问题的非蚂蚁部分(无论如何,在你解决之前,你无法继续前进):

似乎你自相矛盾,你的DEBUGtrue,所以为什么你想知道TestSensitive?这是选择的if分支。

但是我相信对其他类的引用,你需要在类路径的编译过程中使用它们。我相信你无法阻止这种方式。

然而,有一些方法可以实现预期的行为。例如:

  • 通过反射 - 您将使用它的名称加载类并稍后实例化/使用它,或
  • 因为您已经有了通用接口ITestWrapper
    • 并使用Spring
    • 等框架使用一些IOC(控制反转)概念
    • 通过一些类的自我注册(如听众)