7 Stimmen

Ist es möglich, nant Ziele aus enthaltenem Buildfile zu überschreiben?

Ich habe eine generische common.xml-Datei, die eine Reihe von generischen nant Ziele, die zwischen mehreren Builds wiederverwendet werden enthält. Ich möchte einige dieser Nant-Ziele "überschreiben" und zusätzliche Schritte entweder vor oder nach der Ausführung des vorhandenen Ziels einfügen.

Werden Nant-Targets aus der aktuellen Datei zuerst verwendet, d.h. wenn ich in der aktuellen Builddatei ein Nant-Target mit demselben Namen wie ein Target in einer eingebundenen Datei erstelle, wird dann dieses aufgerufen und das eingebundene ignoriert? Wenn das der Fall ist, kann ich einfach das eingeschlossene Ziel aufrufen, aber es scheint, als ob das dann ein rekursiver Aufruf wäre und nicht zu einer eingeschlossenen Aufgabe.

Was denken Sie?

3voto

Ich hatte die gleiche Frage (und fand die gleichen Ergebnisse), aber ich habe auch eine Lösung gefunden. Erlauben Sie mir, dies anhand eines Beispiels zu erläutern.

Sie haben eine ProjectFile.build und eine CommonFile.build. Angenommen, Sie möchten ein Ziel namens "Clean" überschreiben.

Sie müssen eine neue Datei erstellen (nennen Sie sie CommonFile_Clean.build), die Folgendes enthält:

<?xml version="1.0"?>
<project>
  <target name="Clean">
        <echo message="Do clean stuff here" />
  </target>
</project>

In CommonFile.build schließen Sie bedingt CommonFile_Clean.build ein:

<?xml version="1.0"?>
<project>
    <echo message="checking Clean definition..." />
    <if test="${not target::exists('Clean')}">
            <echo message="Clean target not defined." />
        <include buildfile="CommonFile_Clean.build" />      
    </if>
</project>

In ProjectFile.build können Sie entweder das Clean-Ziel definieren (in diesem Fall wird CommonFile_Clean.build nicht verwendet) oder die Standardimplementierung verwenden, die in CommonFile_Clean.build definiert ist.

Wenn Sie eine große Anzahl von Zielen haben, ist das natürlich eine Menge Arbeit.

Ich hoffe, das hilft.

2voto

Brett Rigby Punkte 5636

Nein, ich habe es gerade für Sie ausprobiert, da ich einen ähnlichen Aufbau habe, in dem ich alle Build-Ziele, die wir verwenden, in einer commonFile.build habe und dann den folgenden Code verwende, um sie einzubringen...

<include buildfile="../commonFile.build"/>

In meiner newFile.build (die die commonFile.build am Anfang der Datei enthält), fügte ich ein neues Ziel namens "build" hinzu, wie es in der commonFile existiert, und hier ist die Fehlermeldung, die Sie als Antwort erhalten...

BUILD FAILED

Doppeltes Ziel namens 'build'!

Nette Idee, die wahrscheinlich auf OO-Prinzipien beruht, aber leider funktioniert sie nicht.

Sind sie gut?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X