1

我开发了一个在本地 Apache Tomcat 7.0.14 服务器(我的开发环境)上运行的 Web 应用程序。我已准备好将我的应用程序推送到生产主机,但在为每个环境管理不同的条目值时遇到了问题。

我当前的构建过程完全在我的 Netbeans 7.0.1 IDE 中执行。它使用 Ant,这是我承认我不熟悉的东西,并生成一个 .war 文件。我可以通过复制这个 .war 文件来部署到我的生产主机。应用程序运行,但它缺少所有正确的生产配置数据。

我已将我的应用程序编写为可合理配置的。像大多数应用程序一样,我的开发环境和生产环境之间的各种数据必须有所不同。我能够将所有这些数据分离到我的部署描述符 (web.xml) 或上下文配置 (context.xml) 文件中,然后在我的应用程序中读取它。值的细节不是特别相关,但作为示例,至少有一个资源参考值用作数据源。

我不能做的是轻松地为我的不同配置维护单独的值。我希望有 web.xml 或 context.xml 文件的第二个副本,我可以使用它来构建 .war 文件的单独副本以部署到生产环境。我也会对允许我在此文件中插入某种变量(${}?)的解决方案感到满意。但是,我必须能够将数据本身保存在文件中,因为会有大量条目。由于数据将在文件中,我认为自然的解决方案是第二个 web.xml 或 context.xml 文件。

理想情况下,我希望在 Netbeans 中有一个简单的解决方案。缺少这一点,在 Ant 中执行此操作的说明可能就足够了。任何相关的术语也会有所帮助。我迷失了关​​于tomcat中“上下文”、“环境”和“部署”的阅读,它们的含义与我正在寻找的不同。最后,如果这不能通过任何一个来完成,是否有可以提供帮助的工具?编写一个独特的 shell 脚本远非理想。

很难相信没有一个简单的解决方案。这似乎是每个部署都需要解决的问题。这不是条目和引用存在于 xml 中的原因吗?但是,我在 Tomcat 手册中找不到任何关于此的内容。

4

1 回答 1

2

你有很多选择。对于构建特定属性,我建议为每个环境创建属性文件并通过propertyAnt 中的任务加载它们。因此,例如,给定假设环境devqaprod,您可以拥有名称为 build 的属性文件。{env} .properties,然后像这样加载它们:

构建.xml

<property file="build.${environment}.properties"/>

调用为:

蚂蚁 -Denvironment=dev

这为您提供了一些有用的构建时间属性替换。但当然,您对替换项目文件中的变量更感兴趣。其中一种方法是使用 Ant Replace Task。示例用法:

<target name="prepare-resources">
    <replace dir="${targetdir}" replacefilterfile="vars.${environment}.properties">
        <include name="**/*.txt"/>
     </replace>
</target>

您将调用类似于我给出的第一个示例的 Ant 构建。您可以使用其他include指令添加任意数量的资源类型。

最后,您还可以选择使用环境标识符标记一整套文件,并使用 Ant Copy Task 将它们“提升”为所需的构建工件。例如:

<target name="promote-resources">
    <copy todir="${targetdir}">
        <fileset dir="${sourcedir}"/>
        <mapper type="regexp" from="(.*).${environment}.(.*)" to="\1.\2"/>
    </copy>
</target>

targetdir您将根据需要填写sourcedir上面的代码片段会将web.dev.xmlcontext.dev.xml类型的所有文件提升为web.xmlcontext.xml

您可以结合以上所有或部分方法来获得适合您环境的高度定制的构建。我还建议将 Maven 视为构建工具,它使这样的任务变得更加容易!

于 2011-10-12T03:27:20.137 回答