Domanda

Ho una domanda su qualcosa che ho incontrato oggi al lavoro.

Ho due progetti che sono costruiti con script di build ant.

Consente di chiamare loro projectA e ProjectB.

ProjectA costruisce projectA.jar, e ProjectB costruisce projectB.war e projectB.ear.

ProjectB.war comprende projectA.jar nella directory lib WEB-INF.

In ProjectB c'è una cartella lib e contiene projectA.jar.

In questo scenario creare il file di generazione per ProjectB tira in projectA.jar direttamente da projectA e tira anche in projectA.jar dalla directory lib ProjectB (lo so cattiva pratica, ma ho ereditato questo progetto, e sto fissandolo :)).

Così, quando la guerra e il successivo file ear sono costruiti, nella lib directory WEB-INF del projectb.war ci sono due file projectA.jar.

Quindi, la prima domanda è:

Come funziona formica mettere insieme il file di guerra? Vorrei che se si sta usando una directory temporanea per memorizzare i file per l'imballaggio, non sarei in grado di avere due file w / lo stesso nome?

Secondo:

Quando schiero questo su OC4J, e guardo nella directory che contiene l'orecchio esploso / file di guerra, allora c'è solo 1 file di projectA.jar, come mi sarei aspettato. Come determinare quale file viene utilizzato, non è importante? Sono solo curioso.

Questa è stata la fonte di problemi come il projectA stava costruendo diverso su macchine diverse, un altro problema in sé. Ma il vaso che è stato selezionato fuori dei due è stato sempre coerente, una generazione da una macchina sarebbe sempre lavorare e uno da un'altra macchina non sarebbe.

Grazie per il vostro aiuto.

È stato utile?

Soluzione

una guerra è semplicemente un file zip. E come tale può contenere due file con lo stesso nome. Si dice anche così nel Ant manuale :

  

Si prega di notare che il formato Zip consente   più file dello stesso   nome completo di esistere all'interno di un   unico archivio.

Ant non usa una directory temporanea per costruire la guerra. E 'tutto fatto in memoria.

Dato che in Windows non possono esistere due file con lo stesso nome, uno di loro viene ignorato durante l'estrazione. Io non sono sicuro che uno viene ignorata, ma la mia ipotesi è che la prima aggiunta è l'unico estratto.

Per evitare questo tipo di errore, è necessario escludere espressamente uno dei file:

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

     

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top