0

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 类中。有没有更好的方法来做到这一点。

4

1 回答 1

2

让我回答问题的非蚂蚁部分(无论如何,在你解决它之前你不能再进步了):

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

但是,我相信对于其他类的引用,您需要在编译期间在类路径上拥有这些。我相信你不能以这种方式阻止这种情况。

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

  • 通过反射 - 您将使用它的名称加载类并稍后实例化/使用它,或者
  • 因为您已经有了通用界面ITestWrapper
    • 并使用一些 IOC(控制反转)概念使用框架,如Spring
    • 通过一些类的自我注册(如听众)
于 2013-08-10T06:20:06.133 回答