【发布时间】:2012-02-07 15:21:40
【问题描述】:
我的任务是为我们的 Ant 构建脚本创建自动通知。这样当有人推出部署时,我们的团队可以自动收到一封有关它的电子邮件。
显而易见的选择是使用 Ant 预定义的 Ant's mail task:
<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 task using mail and activation jar in external location。根据答案,似乎有两种解决方案。
首先是手动把这些库依赖放到ant类路径上。这可以使用-lib 命令行参数来完成,或者在eclipse 中可以使用Window > Preferences > Ant > Runtime > Global Entries,然后添加mail.jar 和activation.jar(我很确定这与-lib 相同,如果我错了纠正我)。但这种解决方案对我们的团队来说是不可取的,因为这意味着我们每个人都必须手动执行这些步骤。我正在寻找一种方法来简单地提交我的通知代码,并且它应该可以在 svn 更新后的另一个 eclipse 安装上工作。
链接帖子中的另一个解决方案提到了一种以编程方式执行上述操作的方法,即从自身调用 Ant:
<exec executable="ant">
<arg value="-lib"/>
<arg value="PATH_TO_MY_LIB"/>
<arg value="target"/>
</exec>
问题在于 Ant 命令行工具显然只包含在完整安装中,而不是 eclipse 发行版。因此,如果没有任何想要使用邮件任务的人手动操作,就无法使其正常工作。
有什么方法可以在不增加项目设置的烦人步骤的情况下实现自动化吗?我真的不明白为什么这很难实现 - 如果邮件任务 不是 由 Ant 预定义,这似乎会更容易。希望我错过了什么。
【问题讨论】:
-
您是否考虑过使用 CI 来完成此类任务?它们带有邮件和大大改进的报告。我的投票是jenkins-ci.org
标签: java eclipse ant jakarta-mail