Classpath für taskdef?
Ich bin die Definition einer neuen task in Ant.
Exportieren als jar und Hinzugefügt, um meine buildfile:
<taskdef classname="X" classpath="Y.jar"/>
Das problem ist, dass dies scheitert zur Laufzeit.
Es sagt mir, es hat nicht die Klasse zu finden.
Durch das hinzufügen der jar in den classpath, es ist korrigiert.
Meine Frage ist: gibt es eine Möglichkeit, dass ich kann beziehen sich auf mein Glas aus der Ant-buildfile, ohne änderung der classpath?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wissen, den Pfad der jar, innerhalb ant-Skript definieren Sie den Klassenpfad für Ihre eigene Aufgabe.
Ja. Ich nehme an, Sie schaute auf die doc für
taskdef
, die zeigt nur den Namen der Aufgabe und die Umsetzung Klasse. Allerdingstaskdef
Unterklassentypedef
, und wenn man sich die doc für letzteres wirst du sehen, dass es auch eineclasspath
Attribut.JEDOCH, dieses Attribut zu verwenden, bedeutet, dass Ihre ant-Skripte sind gebunden an einen bestimmten Umwelt; Sie sind nicht sehr portabel. Ein weit besserer Ansatz ist die übergabe der classpath in Ant, mit der
-lib
Aufruf-option.CLASSPATH
die environment-variable nicht. Löschen Sie es aus Ihrer Umgebung, und in die Gewohnheit, die Angabe klassenpfade ausdrücklich. Denn sonst, wirst du dich mit einem hart-zu-debug-problem, wenn eine Bibliothek geladen wird von Ihrem classpath und Sie es nicht erwarten. Oder jemand anderes kann das nicht ausführen von code, weil er/Sie nicht den gleichenCLASSPATH
Umgebungsvariable.-lib
option macht den Benutzer bewusst von diesen Pfaden. Sie immer noch müssen, um dem Benutzer mitzuteilen, wo diese zu finden sind (z.B. in einer readme-Datei, Hilfe-Datei oder eine echo-Nachricht). Oder Sie können festlegen, strukturieren Sie Ihre Projekt-directory-Hierarchie enthalten diese libs in einem bestimmten subdir zu "Umwelt-unabhängig." Ein build-Skript sollte sich darum kümmern diese details und idealerweise erzeugen Sie eine vernünftige Objekt mit dem Standard -ant
Aufruf.