Pergunta

Tenho uma pergunta sobre algo que encontrei hoje no trabalho.

Eu tenho dois projetos construídos com o script de construção da ANT.

Vamos chamá -los de Projeto e Projectb.

O Projeto Builds Projecta.jar e o Projectb Builds Projectb.war e ProjectB.ear.

O Projectb.war inclui Projecta.jar no diretório Lib-Inf-Inf.

No ProjectB, existe um diretório Lib e ele contém Projecta.jar.

Neste cenário de construção, o arquivo de construção do ProjectB atrai o projeto.jar diretamente do Projecta e também puxa o Projecta.jar do diretório LIB do ProjectB (eu conheço uma prática ruim, mas herdei este projeto e estou consertando -o :)) .

Portanto, quando a guerra e o arquivo de ouvido subsequentes são construídos, no diretório LIB da Web-Inf do Projectb.war, existem dois arquivos Projecta.jar.

Portanto, a primeira pergunta é:

Como Ant coloca o arquivo de guerra? Eu pensaria que se estiver usando um diretório temporário para armazenar os arquivos para embalagens, não seria capaz de ter dois arquivos com o mesmo nome?

Segundo:

Quando eu implanto isso no OC4J, e procuro no diretório que contém os arquivos de ouvido/guerra explodidos, há apenas 1 arquivo Projecta.jar, como eu esperaria. Como ele determina qual arquivo é usado, não é importante? Eu só estou curioso.

Essa era a fonte de problemas, pois o projeto estava se formando de maneira diferente em diferentes máquinas, outro problema em si. Mas o frasco que foi selecionado entre os dois sempre era consistente, uma construção de uma máquina sempre funcionava e uma de outra máquina não.

Obrigado pela ajuda.

Foi útil?

Solução

Uma guerra é simplesmente um arquivo zip. E, como tal, pode conter dois arquivos com o mesmo nome. É até diz isso no Manual de formigas:

Observe que o formato ZIP permite que vários arquivos do mesmo nome totalmente qualificado existam em um único arquivo.

A Ant não usa um diretório temporário para construir a guerra. Tudo é feito na memória.

Como no Windows dois arquivos com o mesmo nome não podem existir, um deles é ignorado durante a extração. Não tenho certeza de qual é ignorado, mas meu palpite seria que o primeiro adicionado é o único extraído.

Para evitar esse tipo de erro, você precisa excluir especificamente um dos arquivos:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top