题
我有一个东西,我今天遇到的问题工作。
我有与Ant构建脚本构建两个项目。
让我们称之为了projectA和项目B。
项目A构建projectA.jar,和项目B建立projectB.war,和projectB.ear。
ProjectB.war包括在WEB-INF lib目录projectA.jar。
在项目B有一个lib目录,它包含projectA.jar。
在此版本为场景的项目B构建文件中projectA.jar从了projectA直接拉动,同时也从项目B lib目录(我知道不好的做法,但我继承了这个项目,并正在将其固定在拉projectA.jar :))。
所以,当战争和随后的耳朵文件是建立在projectb.war的WEB-INF lib目录下有两个projectA.jar文件。
因此,第一个问题是:
如何蚂蚁把war文件一起?我想如果是使用临时目录来存放包装的文件,我就不能有两个文件瓦特/同名?
第二
当我部署在此OC4J,并期待在包含爆炸耳朵/战争的文件,则只有1 projectA.jar文件,如我期望的目录。它是如何确定哪些文件被使用,并不重要?我只是好奇。
这是作为了projectA是在不同的机器本身构建不同,另一个问题问题的根源。但是,选择了两个瓶子是始终保持一致,从一台机器的生成总是工作,一个从另一台机器不会。
感谢您的帮助。
解决方案
一个WAR是一个简单的zip文件。正因为如此可以包含具有相同名称的两个文件。它甚至是这么说在 Ant手册:
请注意,Zip格式允许 相同的多个文件 完全合格的名称内的存在 单个归档文件。
蚂蚁不使用一个临时目录来构建WAR。它在内存中全部完成。
由于在Windows中两个文件具有相同的名称不能存在,其中之一是在萃取过程中忽略。我不知道哪一个被忽略,但我的猜测是,添加的第一个是提取的唯一的一个。
要避免这种错误,你需要明确排除的文件之一:
<war destfile="myapp.war" webxml="src/metadata/myapp.xml">
<lib dir="libs">
<exclude name="projectA.jar"/>
</lib>
<lib dir="projectAlibs"/>
...
</war>