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



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
    • 通过一些类的自我注册(比如监听器)

相关内容

  • 没有找到相关文章

最新更新