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

Java Ant setter的执行取决于属性位置,java,ant,Java,Ant,这把我难住了 我编写了一个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

这把我难住了

我编写了一个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不会执行

我在Ant1.7.1和1.9.0中都见过这种行为。有谁能告诉我为什么会发生这种奇怪的行为,我可能做错了什么?我的任务有15个属性,当它是第11个或更低的属性时,不设置logLevel属性

根据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中。它发生在使用IBMRationalTeamConcertJazz构建引擎的ant构建期间


我不知道问题出在哪里,但我发现了一种解决方法,即使用动态ant任务而不使用setter。有关简单说明,请参阅。这对我起了作用。

如果问题不在SETER里面,而是它是否被调用,请考虑改变这个问题中提供的信息。