1

今日仕事で出会ったことについて質問があります。

antビルドスクリプトでビルドされた2つのプロジェクトがあります。

それらをprojectAおよびprojectBと呼びましょう。

ProjectAはprojectA.jarをビルドし、projectBはprojectB.warとprojectB.earをビルドします。

ProjectB.warには、web-inflibディレクトリにprojectA.jarが含まれています。

projectBにはlibディレクトリがあり、projectA.jarが含まれています。

このビルドシナリオでは、projectBのビルドファイルはprojectAから直接projectA.jarをプルし、projectB libディレクトリからprojectA.jarもプルします(悪い習慣は知っていますが、このプロジェクトを継承し、修正しています:)) 。

したがって、warとそれに続くearファイルがビルドされると、projectb.warのweb-inflibディレクトリに2つのprojectA.jarファイルがあります。

したがって、最初の質問は次のとおりです。

antはどのようにwarファイルをまとめますか?パッケージ化用のファイルを保存するために一時ディレクトリを使用している場合、同じ名前の2つのファイルを作成することはできないと思いますか?

2番:

これをOC4Jにデプロイし、展開されたear / warファイルを含むディレクトリーを調べると、予想どおり、projectA.jarファイルは1つだけです。重要ではないが、どのファイルが使用されているかをどのように判断しますか?私はただ興味があります。

これは、projectAが異なるマシン上で異なる方法で構築されていたため、問題の原因でした。それ自体が別の問題でした。しかし、2つから選択されたjarは常に一貫しており、1つのマシンからのビルドは常に機能し、別のマシンからのビルドは機能しませんでした。

ご協力いただきありがとうございます。

4

1 に答える 1

4

WARは単なるzipファイルです。そのため、同じ名前の2つのファイルを含めることができます。Antのマニュアルにもそう書かれています:

Zip形式では、同じ完全修飾名の複数のファイルを1つのアーカイブ内に存在させることができることに注意してください。

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>

于 2009-10-14T00:35:22.857 に答える