这让我很困惑。
我写了一个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的动态蚂蚁任务。请参阅此处以获取简单描述。这对我很有效。