Ant setter的执行取决于属性的位置



这让我很困惑。

我写了一个ant任务,它通过一个属性设置日志记录级别(logLevel="INFO")。setter是这样实现的

public void setLogLevel(String logLevel) {
    System.out.println("Log level passed to ant task: " + logLevel);
    this.level = Level.toLevel(logLevel);
    System.out.println("Log level set to " + level.toString());
}

当我测试任务时,这个setter从未执行过,即使属性拼写和设置正确。经过一番努力,我决定尝试一些不重要的东西;我将logLevel属性移到了其他属性之前(它是倒数第二个)。你猜怎么着?这个改变导致setter执行。

我来回更改了属性好几次,以确保这会有所不同,确实如此。如果该属性是最先遇到的属性之一,则执行setter并设置该属性。如果它是最后遇到的一个,则setter不会执行。

我在Ant 1.7.1和1.9.0中都看到了这种行为。有人能告诉我为什么会发生这种奇怪的行为,以及我可能做错了什么吗?我的任务有15个属性,当logLevel属性是第11个或更低的属性时,它不会被设置。

根据Martin Clayton的说法,这里是build.xml文件中的xml片段。这里设置了logLevel属性,但如果我把它下移几行,它就不会被设置。

        <testReport report="${report}/report.xml" 
        logLevel="${logLevel}"
        highestSeverityCountProperty="highestCount"
        highSeverityCountProperty="highCount" 
        mediumSeverityCountProperty="mediumCount"
        lowSeverityCountProperty="lowCount" 
        lowestSeverityCountProperty="lowestCount"
        totalViolationsCountProperty="totalCount"
        failOnHighestSeverityCount="${lvl1ViolationsFailValue}" 
        failOnHighSeverityCount="${lvl2ViolationsFailValue}"
        failOnMeidumSeverityCount="${lvl3ViolationsFailValue}" 
        failOnLowSeverityCount="${lvl4ViolationsFailValue}"
        failOnLowestSeverityCount="${lvl5ViolationsFailValue}" 
        failOnTotalViolationsCount="${totalViolationsFailValue}"
        failureReason="failMessage"/>

我遇到的问题是,并不是所有的属性都设置好了。这个问题不会发生在从命令行或eclipse构建的ant中。它发生在使用IBMRationalTeamConcert Jazz构建引擎的ant构建过程中。

我不知道问题出在哪里,但我找到了一个解决方法,使用不带setter的动态蚂蚁任务。请参阅此处以获取简单描述。这对我很有效。

相关内容

  • 没有找到相关文章

最新更新