どのようにアリ戦争のタスクの作業をしますか?
質問
私は仕事で今日遭遇した何かについて質問があります。
私は、Antビルドスクリプトを使用して構築されている2つのプロジェクトを持っています。
PROJECTAとProjectBのそれらを呼び出すことができます。
PROJECTAはprojectA.jarを構築し、ProjectBのはprojectB.warを構築し、そしてprojectB.ear。
ProjectB.warは、WEB-INFのlibディレクトリにprojectA.jarが含まれています。
ProjectBの内のlibディレクトリが存在し、それはprojectA.jarが含まれています。
(私は悪い習慣を知っているが、私はこのプロジェクトを継承し、それを固定しています。このビルドシナリオでProjectBのためのビルドファイルがPROJECTAから直接projectA.jarに引っ張ると、それはまた、ProjectBのlibディレクトリからprojectA.jarに引っ張ります:))。
だから、戦争とその後のEARファイルが構築されているとき、projectb.warのWEB-INFのlibディレクトリに2つのprojectA.jarファイルがあります。
だから、最初の質問はあります:
アリが一緒にwarファイルを入れてどのように?私はそれは、包装用のファイルを格納するための一時ディレクトリを使用している場合、私はワット/同じ名前の2つのファイルを持ってすることはできないと思うだろう?
セカンドます:
私が期待するようEAR / WARファイルを展開含まれているディレクトリに、私はOC4J上でこれを展開し、、および外観は、その後わずか1 projectA.jarファイルは、そこにあります。どのようにそれは重要ではありません、使用されているファイルを判別しますか?私は興味があります。
PROJECTA自体は、異なるマシンで異なる別の問題を構築したとしてこれが問題の原因でした。しかし、別のマシンから2は常に一貫していた、一台のマシンからのビルドがなり、常に仕事と1の中から選択されたjarファイルがないでしょう。
あなたの助けに感謝します。
解決
A WARは、単にzipファイルです。そのように同じ名前の2つのファイルを含めることができます。それも、 Antのマニュアルの中でそう言うされます:
zip形式ができますので、予めご了承ください 同じの複数のファイル A内に存在する完全修飾名 単一のアーカイブます。
AntのWARを構築するために一時ディレクトリを使用していません。それはすべてメモリ内で行われます。
Windowsで同じ名前を持つ2つのファイルは、それらのいずれかが抽出時に無視され、存在することはできませんので。私は必ず1は無視されていないよこれが、私の推測では、追加された最初の1は、抽出された唯一のものであるということでしょう。
この種のエラーを回避するには、特別のいずれかのファイル除外する必要があります:
<war destfile="myapp.war" webxml="src/metadata/myapp.xml">
<lib dir="libs">
<exclude name="projectA.jar"/>
</lib>
<lib dir="projectAlibs"/>
...
</war>