Wie Sie programmgesteuert hinzufügen Ant-Bibliothek-Abhängigkeiten für E-mail-Aufgabe
Habe ich wurde beauftragt mit der Erstellung von automatisierten Benachrichtigungen für unsere Ant-build-Skripts. Dies ist so, dass wenn jemand drückt eine Bereitstellung, kann unser team erhalten Sie automatisch eine E-Mail über Sie.
Die offensichtliche Wahl zu nutzen, um die Ant-task E-mail, die kommt mit vordefinierten Ant:
<target name="notify" description="notify team">
<mail subject="latest deployment">
<from address="[email protected]" />
<to address="[email protected]" />
<message>A new build has been pushed out to prod</message>
</mail>
</target>
Jedoch diese Ergebnisse in der folgenden runtime-exception:
java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage
Dies ist, weil Ant-task E-mail-hängt davon ab, JavaMail und JavaBeans Activation Framework, Bibliotheken, die offenbar nicht im Lieferumfang der distribution. Warum Ant wäre eine Aufgabe definieren, hing von einer Bibliothek, aber nicht die Bibliothek, ist mir unklar.
Dieses Problem wurde bereits diskutiert über diesen Beitrag: ant-task E-mail mit E-mail und Aktivierungs-jar im externen Speicherort. Anhand der Antworten scheint es zwei Lösungen.
Die erste ist die manuelle setzen diese Bibliothek-Abhängigkeiten auf den ant-classpath. Dies kann durchgeführt werden, indem die -lib
command-line-argument, oder in eclipse kann man Window > Preferences > Ant > Runtime > Global Entries
, und fügen Sie dann mail.jar
und activation.jar
(ich bin mir ziemlich sicher, dass dies auf das gleiche hinausläuft wie -lib
, korrigiert mich wenn ich falsch Liege). Aber diese Lösung ist nicht wünschenswert für unser team, denn es würde bedeuten, dass jeder von uns manuell führen Sie diese Schritte durch. Ich bin auf der Suche nach einem Weg, um einfach zu Begehen meine Meldung code und es sollte funktionieren auf einer anderen eclipse-Installation nach svn update.
Die andere Lösung in dem verlinkten post erwähnt, ein Weg, um die oben programmgesteuert durch Aufruf von Ant aus sich selbst:
<exec executable="ant">
<arg value="-lib"/>
<arg value="PATH_TO_MY_LIB"/>
<arg value="target"/>
</exec>
Das problem dabei ist, dass die Ant-Kommandozeilen-tool ist anscheinend nur für die vollständige Installation, nicht die eclipse-distribution. Also nochmal es gibt keinen Weg, um es Arbeit ohne irgendeine manuelle Aktion durch die alle wollen, verwenden Sie die E-mail-Aufgabe.
Gibt es eine Möglichkeit, kann ich das automatisieren, ohne Zugabe von anderen lästigen Schritt zu Projekt-setup? Ich verstehe wirklich nicht, warum dies so schwer zu erreichen - es scheint, dass, wenn die E-mail-Aufgabe war nicht vordefiniert Ameise wäre dies einfacher. Hoffentlich bin ich etwas fehlt.
- Haben Sie sich überlegt mit einem CI für diese Art von Aufgaben? Sie kommt mit den E-mails und viel bessere Berichterstattung. Meine Stimmen für jenkins-ci.org
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mail ist eine optionale tasks in ANT. Für die Installation dieser zusätzlichen Bibliotheken ANT 1.7 Hinzugefügt fetch.xml script, die aufgerufen wird, wie folgt:
Unter windows, die Sie könnten versuchen:
Für eine vollständige Erklärung finden Sie in der ANT Manual-Dokumentation.
Update
Den folgenden ANT-Datei hat eine installieren-Gläser Ziel, das verwendet werden kann, installieren Sie die fehlenden ANT jars verwendet, die von der E-mail-Aufgabe.
Entdeckte ich, dass der ANT-task E-mail-Aufgabe, die Lasten der abhängigen Klassen aus der ANT-system-classpath. Dies bedeutet, dass der Aufbau läuft in zwei Schritten:
Meisten ANT-tasks ermöglichen Ihnen die Angabe eines classpath-Referenz. Die E-Mail-Aufgabe nicht. Versuchen, Forschung zu diesem Thema führen mich zu der folgenden mailing-Liste-thread:
Die Lösung ist verworren und nicht die Mühe Wert. Ich würde empfehlen, das Leben mit der Unannehmlichkeiten... (Die install-Gläser target muss nur einmal ausgeführt werden)
Mit dem Beispiel von diese E-mail-thread ich habe eine funktionierende Lösung, die sendet eine E-Mail, wenn die tests fehlschlagen.
Müssen Sie herunterladen ant-classloadertask.jar,
und mail.jar von javamail und legen Sie Sie in test.libs.dir.
Mit der
taskdef
Befehl, Sie können dynamisch laden Sie neue Aufgaben, und geben Sie einen classpath, von wo aus Sie geladen werden. Verwende ich erfolgreich für das laden von neuen Aufgaben, die aus einer externen Bibliothek, die nicht auf der ant-Klasse Weg. Ob es auch funktioniert, wenn die Aufgabe bereits existiert, weiß ich nicht.Ich würde wahrscheinlich starten, mit dem Versuch, re-definieren der task E-mail mit einem neuen Namen:
Vielleicht müssen Sie den ursprünglichen ant-classpath in den class-path hier so, dass die Klasse der E-mail-Aufgabe gefunden werden kann.
Wenn das nicht funktioniert, vielleicht können Sie den Quellcode der E-mail-Aufgabe, benennen Sie die Klasse, bündeln es zusammen mit den Klassen aus
mail.jar
undactivation.jar
in Ihrem eigenen jar aus und laden Sie diese Aufgabe aus dem GLAS. Dies sollte funktionieren, nur wie funktioniert es mit jeder Aufgabe, die nicht im Lieferumfang ant.Können Sie diese Gläser als externe jars zum classpath von ant run-config (dies ist mein ftp-Beispiel):
und speichern Sie diese ausführen config zum Projekt(Registerkarte: Allgemeine--> Freigegebene Datei, in der Regel nehme ich so etwas wie
resources/eclipse
dafür) und commit im svn.Natürlich könnte man schreiben Sie Ihre eigene E-mail-Aufgabe, zu kümmern.
Mit Ant-1.8.2-und ant-classloadertask.jar Lösung erwähnt oben (von bro), die ich brauchte, um zu ändern, loader Attribut classloadertask aus:
in:
sonst Klassen in activation.jar und mail.jar wurden nicht gefunden durch den classloader.