1

ローカルの Apache Tomcat 7.0.14 サーバー (私の開発環境) で実行される Web アプリケーションを開発しました。アプリケーションを本番ホストにプッシュする準備はできていますが、環境ごとに個別のエントリ値を管理する際に問題があります。

現在のビルド プロセスは、すべて Netbeans 7.0.1 IDE 内で実行されています。これは、私が慣れていないことを認める Ant を使用し、.war ファイルを生成します。この .war ファイルをコピーすることで、本番ホストにデプロイできます。アプリケーションは実行されますが、正しい運用構成データがすべて欠落しています。

私は自分のアプリケーションを適切に構成できるように作成しました。ほとんどのアプリと同様に、開発環境と運用環境ではさまざまなデータが異なる必要があります。このすべてのデータを展開記述子 (web.xml) またはコンテキスト構成 (context.xml) ファイルに分離し、アプリケーション内で読み取ることができます。値の詳細は特に関係ありませんが、例として、DataSource として機能する Resource 参照値が少なくとも 1 つあります。

私ができないことは、個別の構成に対して個別の値を簡単に維持することです。私は web.xml または context.xml ファイルの 2 番目のコピーを用意したいと考えています。これを使用して、.war ファイルの別のコピーを作成し、運用環境にデプロイできます。また、このファイルにある種の変数 (${}?) を挿入できるソリューションがあれば幸いです。ただし、エントリ数が多いため、データ自体をファイルに保持できる必要があります。どちらの方法でもデータはファイルに格納されるため、自然な解決策は 2 番目の web.xml ファイルまたは context.xml ファイルであると考えました。

理想的には、Netbeans 内での単純なソリューションが必要です。それがなければ、Ant でこれを行うための手順でおそらく十分でしょう。関連する用語も役に立ちます。Tomcat の「コンテキスト」、「環境」、および「デプロイメント」について読みにくくなってしまいました。これらは、私が探しているものとは異なる意味を持っています。最後に、これがどちらでもできない場合、役立つツールはありますか? 独自のシェル スクリプトを作成することは、理想とはほど遠いでしょう。

これに対する簡単な解決策がないとは信じがたいです。これは、すべての展開で対処する必要がある種類のもののようです。エントリと参照がxmlに存在するのはそのためではありませんか? ただし、Tomcat のマニュアルには、これに関するものは何も見つかりませんでした。

4

1 に答える 1

2

多くのオプションがあります。ビルド固有のプロパティについては、環境ごとにプロパティ ファイルを作成しproperty、Ant のタスクを介してそれらをロードすることをお勧めします。したがって、たとえば、架空の環境devqaprodが与えられた場合、 build という名前のプロパティ ファイルを作成できます。{env} .properties を開き、次のようにロードします。

build.xml

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

次のように呼び出されます。

ant -Denvironment=dev

これにより、便利なビルド時のプロパティの置換が得られます。しかしもちろん、プロジェクト ファイル内の変数を置き換えることにもっと関心があります。これを行う方法の 1 つは、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>

必要に応じてtargetdirsourcedirを入力します。上記のスニペットは、タイプweb.dev.xmlまたはcontext.dev.xmlのすべてのファイルをweb.xmlおよびcontext.xmlに昇格させます。

上記の方法のすべてまたは一部を組み合わせて、環境に合わせて高度にカスタマイズされたビルドを取得できます。また、Maven をビルド ツールとして検討することをお勧めします。Maven を使用すると、このようなタスクがはるかに簡単になります。

于 2011-10-12T03:27:20.137 に答える