代码之家  ›  专栏  ›  技术社区  ›  broschb

蚂蚁战争任务是如何工作的?

  •  1
  • broschb  · 技术社区  · 16 年前

    我有两个用ant构建脚本构建的项目。

    让我们把它们叫做projectA和projectB。

    ProjectA构建ProjectA.jar,projectB构建projectB.war和projectB.ear。

    在projectB中有一个lib目录,其中包含projectA.jar。

    在这个构建场景中,projectB的构建文件直接从projectA中拉入projectA.jar,它也从projectB lib目录中拉入projectA.jar(我知道这是一个坏习惯,但我继承了这个项目,并且正在修复它:)。

    因此,在构建war和后续ear文件时,projectb.war的web inf lib目录中有两个projectA.jar文件。

    因此,第一个问题是:

    第二:

    当我在OC4J上部署它,并查看包含分解的ear/war文件的目录时,正如我所期望的,只有1个projectA.jar文件。它如何确定使用哪个文件,这并不重要?我只是好奇。

    这是问题的根源,因为projectA在不同的机器上构建的方式不同,这本身就是另一个问题。但是从两台机器中选择的jar总是一致的,一台机器的构建总是可以工作的,而另一台机器的构建则不能。

    谢谢你的帮助。

    1 回复  |  直到 15 年前
        1
  •  4
  •   martin clayton egrunin    15 年前

    战争只是一个zip文件。因此,可以包含两个同名文件。甚至有人在报纸上这样说 Ant manual

    请注意,Zip格式允许 同一文件的多个文件 完全限定名称,以存在于 单一档案。

    要避免此类错误,您需要明确排除以下文件之一:

    <war destfile="myapp.war" webxml="src/metadata/myapp.xml">
      <lib dir="libs">
        <exclude name="projectA.jar"/>
      </lib>
      <lib dir="projectAlibs"/>
    ...
    </war>
    

    推荐文章