通过“属性任务”使用Ant属性文件的原因
我目前正在与一些喜欢设置定义环境特定变量而非使用属性文件的Ant任务的开发人员合作。他们似乎更喜欢这样做,因为它更容易输入:通过“属性任务”使用Ant属性文件的原因
ant <environment task> dist
比它是类型:
ant -propertyfile <environment property file> dist
因此,例如:
<project name="whatever" default="dist">
<target name="local">
<property name="webXml" value="WebContent/WEB-INF/web-local.xml"/>
</target>
<target name="remote">
<property name="webXml" value="WebContent/WEB-INF/web-remote.xml"/>
</target>
<target name="build">
<!-- build tasks here --->
</target>
<target name="dist" depends="build">
<war destfile="/dist/foo.war" webxml="${webXml}">
<!-- rest of war tasks here -->
</war>
</target>
我发现很难说服他们,属性文件是他们正确的路要走。我相信,属性文件是更好,因为:
- 他们提供了更大的灵活性 - 如果你需要一个新的环境,只需要添加一个新的属性文件
- 它更清晰这是怎么回事 - 你必须了解这一点“把戏”以实现他们正在完成的任务
- 不提供默认值和使用覆盖的功能 - 如果他们使用属性文件,他们可以在项目顶部提供默认值,但可以用文件覆盖它们
- 如果在命令行上未提供环境任务,脚本不会中断
当然,他们所听到的是他们需要更改他们的Ant脚本,并且必须在命令行上输入更多内容。
你可以通过“属性任务”提供任何有利于属性文件的其他参数吗?
属性任务将构建文件与环境紧密结合。如果你的开发人员争辩说他们“必须改变他们的蚂蚁脚本”,那么他们为什么不争论在每次部署到新环境时都要改变它? :)
也许你可以说服他们允许属性文件和命令行配置。我设置了我的Ant构建,以便如果build.properties与build.xml存在于相同的目录中,它会将其读入。否则,它会使用一组硬编码的默认属性。这非常灵活。
<project name="example">
<property file="build.properties"/>
<property name="foo.property" value="foo"/>
<property name="bar.property" value="bar"/>
...
</project>
我没有提供项目的build.properties(即build.properties没有在SCM中进行版本控制)。这样开发人员不会*使用属性文件。我确实提供了一个开发人员可以参考的build.properties.example文件。
由于Ant属性,一旦设置,是不可变的,构建文件将使用以该顺序定义的属性:通过命令行设置有-D
或-propertyfile
- 属性从生成加载
- 属性.properties
- 构建中的默认属性。这种方法的XML
优点:
- 构建文件更小,因此更易于维护,更少的错误倾向
- 开发者,只是不能在命令行从设置属性脱身仍然可以使用它们。
- 属性文件可以使用,但不是必需的
你已经是相当有吸引力的参数。如果这些论点没有奏效,那么争论就不会解决问题。其实没有什么就是要解决这个问题。不要以为人们是理性的,会做最实际的事情。他们的自我介入。
停止争论。即使你赢了,你所创造的怨恨和烦恼也不值得。赢得争论可能比输家更糟。
让你的情况,然后让它离开。有可能一段时间后,他们会决定改变方向(因为它实际上更好)。如果发生这种情况,他们会表现得像他们自己的想法。将不会提到你提出了它。
另一方面,他们可能永远不会切换。
唯一的解决方案是朝着一个权威的位置努力,在那里你可以说如何做。
第一个解决方案(使用ant属性)的问题基本上是硬编码。 当你为自己开始一个项目时,它可能很方便,但很快你必须消除这种坏习惯。
我正在使用属性文件接近什么说robhruska,但我已直接提交build.properties文件。这种方式你有一个默认的。
另一方面,我知道我可以在build.xml中添加这些默认值。 (我可能会在接下来的几小时/几天内尝试;-))。
不管怎样,我真的不喜欢第一种方法,我将迫使那些家伙跟随第二个...
所以。诅咒。真正。 – sjas 2013-02-25 13:24:13