Мне было поручено создавать автоматические уведомления для наших скриптов сборки Ant. Это связано с тем, что когда кто-то запускает развертывание, наша команда может автоматически получать по электронной почте сообщение об этом.
Очевидным выбором было использовать Почтовое задание Ant , которое предопределено с помощью Ant:
<target name="notify" description="notify team">
<mail subject="latest deployment">
<from address="me@gmail.com" />
<to address="jimmy@yahoo.com" />
<message>A new build has been pushed out to prod</message>
</mail>
</target>
Однако это приводит к следующему исключению времени выполнения:
java.lang.ClassNotFoundException: javax.mail.internet.MimeMessage
Это связано с тем, что почтовая задача Ant зависит от JavaMail и JavaBeans Activation Framework , библиотек, которые, по-видимому, не включены в ее дистрибутив. Почему Ant будет определять задачу, которая зависит от библиотеки, но не включает эту библиотеку, мне неясно.
Эта проблема уже обсуждалась в этом сообщении: Задача ant mail с использованием почты и jar активации во внешнем расположении . Основываясь на ответах, кажется, есть два решения.
Во-первых, вручную поместить эти зависимости библиотеки в путь к муравьям. Это можно сделать с помощью аргумента командной строки -lib
или в Eclipse можно использовать Window > Preferences > Ant > Runtime > Global Entries
, а затем добавить mail.jar
и activation.jar
(я почти уверен, что это то же самое, что и -lib
, поправьте меня если я ошибаюсь). Но это решение нежелательно для нашей команды, потому что это означало бы, что каждый из нас должен был бы выполнить эти шаги вручную. Я ищу способ просто зафиксировать мой код уведомления, и он должен работать при другой установке Eclipse после обновления SVN.
В другом решении в связанном посте упоминается способ сделать вышеперечисленное программно, вызывая Ant из себя:
<exec executable="ant">
<arg value="-lib"/>
<arg value="PATH_TO_MY_LIB"/>
<arg value="target"/>
</exec>
Проблема в том, что инструмент командной строки Ant, по-видимому, включается только в полную установку, а не в дистрибутив Eclipse. Итак, снова нет способа заставить его работать без каких-либо ручных действий со стороны любого, кто хочет использовать почтовое задание.
Можно ли как-нибудь автоматизировать это, не добавляя еще один раздражающий шаг в настройку проекта? Я действительно не понимаю, почему это так трудно достичь - похоже, если бы почтовое задание не было , предопределенное Ant, это было бы проще. Надеюсь, я что-то упустил.