Frage

Ich habe eine Frage über etwas, was ich heute bei der Arbeit begegnet.

Ich habe zwei Projekte, die mit Ant-Build-Skript erstellt werden.

Lets nennen sie projectA und ProjectB.

ProjectA baut projectA.jar und ProjectB baut projectB.war und projectB.ear.

ProjectB.war umfasst projectA.jar im Web-inf lib.

In ProjectB gibt es ein Verzeichnis lib und es enthält projectA.jar.

In diesem Build Szenario zieht die Build-Datei für ProjectB im projectA.jar direkt von projectA und es zieht auch in projectA.jar aus der ProjectB lib (ich weiß, schlechte Praxis, aber ich geerbt, dieses Projekt, und es am Befestigungs :)).

Also, wenn der Krieg und die anschließende Ohr-Datei erstellt werden, in der web-inf lib des projectb.war gibt es zwei projectA.jar Dateien.

Die erste Frage lautet:

Wie funktioniert ant put die WAR-Datei zusammen? Ich würde denken, wenn es ein temporäres Verzeichnis wird mit den Dateien für die Verpackung zu speichern, würde ich nicht in der Lage sein, zwei Dateien w / den gleichen Name?

Zweitens:

Wenn ich implementieren diese auf OC4J und Blick in das Verzeichnis, das die Explosions Ohr enthält / Krieg Dateien dann gibt es nur 1 projectA.jar Datei, wie ich erwarten würde. Wie bestimmt sie, welche Datei verwendet wird, ist nicht wichtig? Ich bin nur Neugierig.

Dies war die Quelle von Problemen wie der projectA aufbaute anders auf verschiedenen Maschinen, ein anderes Problem an sich. Aber das Glas, das wurde von den beiden ausgewählten, war immer konsistent, ein Build von einer Maschine würde immer arbeiten und ein von einer anderen Maschine würde nicht.

Danke für Ihre Hilfe.

War es hilfreich?

Lösung

Ein Krieg ist einfach eine ZIP-Datei. Und als solche enthalten zwei Dateien mit dem gleichen Namen. Es ist sogar so sagt in dem Ant Handbuch :

  

Bitte beachten Sie, dass das Zip-Format erlaubt   mehrere Dateien des gleichen   vollständig qualifizierte Namen zu exist in a   Einzel Archiv.

Ant kein temporäres Verzeichnis verwenden, den Krieg zu bauen. Es ist alles im Speicher durchgeführt.

Da in Windows zwei Dateien mit demselben Namen nicht existieren können, einer von ihnen wird während der Extraktion ignoriert. Ich bin nicht sicher, die man ignoriert, aber meine Vermutung wäre, dass die erste zugegebene nur ein extrahiert.

Um diese Art von Fehler zu vermeiden, müssen Sie speziell eine der Dateien ausschließen zu:

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

     

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top