2014-04-07 122 views
0

Ant似乎忽略了我的一个属性文件。多个Ant属性文件

<property file="local.properties" /> 
<property file="build.properties" /> 

build.properties包含我的团队希望使用的典型属性。我正在介绍local.properties,其中包含我的特定工作站的覆盖。我们在这个项目中使用了Eclipse(我使用的是Kepler),但无论我是在Eclipse中构建还是通过命令行构建,构建都会失败,因为它使用build.properties中的一些值,即使local.properties包含覆盖。

在我的具体情况下,我的Java版本比其他开发人员/环境更新。尽管指定了我在local.properties中的版本,但它仍会尝试在build.properties的版本中使用编译器。

我知道值是好的,因为如果我把我的本地属性在build.properties一切正常。

+0

你确定它正确解析'local.properties'吗?尝试创建一个测试脚本,您只需阅读'local.properties'并查看它是否实际上能够读取它。 – whiskeyspider

+0

类似于正在使用的Java版本可能会受到外部因素(如机器环境变量)的影响。如何做一个简单的测试,并在local.properties中添加“debug = local”,在build.properties中添加“debug = build”,然后在脚本中echo $ {debug}? – CAustin

+0

这是正确的阅读,但我想清楚我失踪了。尽管主'build.xml'包含'local.properties',它在子目录中构建了其他'build.xml'文件。我认为主'build.xml'中的属性会继续,但我想不是这种情况。我是否需要将'local.properties'添加到所有后续的构建中。XML文件来实现我想要的,还是有另一种选择? – ricksmt

回答

0

Eclipse不关心你的build.xml或你的属性文件。这只与蚂蚁。

尝试使用-d标志运行ant,并捕获STDOUT和STDERR。这将显示local.proeprties是否正在读入,并设置了什么值。它会说它是否试图读取local.properties,它是否找到了local.properties,如果是,则设置哪些属性。

另外请记住,属性设置先到先服务。你没有说你在的build.xml中。这可能是在目标中读取它,而其他属性设置在目标之外。即使它们稍后出现在build.xml文件中,也会首先设置在任何目标之外设置的属性。如果这些都设置好了,而你在local.properties中读到,local.properties不会超过他们。我提到这是因为这是我遇到的问题。有人在build.xml的末尾放置了一堆<property/>任务,他们没有意识到这些任务将在任何目标运行之前设置。

同样,试试这个:

Unix和Mac

$ ant -d 2>&1 | tee ant.out # Allows you to see and capture the results 

的Windows

$ ant -d > ant.out 2>&1  # There's no "tee" command in Windows. 

ant.out输出将是成千上万排长队的,但它”我会帮你弄清楚发生了什么事。你发布的内容看起来正确。