在外部位置使用邮件和激活jar的ant邮件任务

时间:2011-11-29 15:10:21

标签: java ant

我有跟踪ant邮件任务 -

<target name="sendtestreport" > 
    <mail mailhost="smtp.com" mailport="1025" subject="Test build" >
        <from address="test@gmail.com" />           
        <replyto address="test@gmail.com" />
        <to address="test@gmail.com" />
        <message>test message</message>
        <attachments>
        </attachments>
    </mail>
</target>

我的项目“lib”文件夹中有激活和邮件jar。我希望能够发送邮件,而不必将这些罐子保存在蚂蚁下载位置。是否可以让ant知道我的“lib”文件夹以查看javaxmail和激活jar。有些事情如果我可以在此目标中指定类路径。

现在,当我执行此目标时,我总是会遇到异常 -

BUILD FAILED
java.lang.ClassNotFound
Exception: javax.mail.internet.MimeMessage

3 个答案:

答案 0 :(得分:3)

不幸的是你不能。 你必须以某种方式将Library Dependencies放入ant类路径。

这可能是ANTH_HOME / lib目录或对命令行参数的更改。

Ant有command-line argument来指定lib目录:

-lib <path> specifies a path to search for jars and classes

您也可以使用该信息从蚂蚁本身调用ant,这可能有点难看:

<exec executable="ant">
  <arg value="-lib"/>
  <arg value="PATH_TO_MY_LIB"/>
  <arg value="target"/>
</exec>

如果从eclipse执行此任务,则可以将lib添加到任务的运行定义中,并与其他开发人员共享此运行定义。

答案 1 :(得分:3)

有关ant中库依赖项的解决方案,请参阅this answer to a similar question

简而言之,将所有的ant插件库放在一起,例如: mail.jar,activation.jar,在特殊文件夹中的公共文件,并通过ANT_ARGS使其可用于所有蚂蚁脚本。
被迫在ant中使用exec任务来解决库依赖关系似乎非常奇怪。

在Eclipse中,通常的做法是在存储库中创建一个模块(cvs,subversion,git)。然后每个团队成员都在他的工作区中使用该模块并简单地使用 Window > Preferences > Ant > Runtime > Global Entries使这些依赖项可用于ant。

答案 2 :(得分:0)

有一个很好的方法已经answered here。它使用Ant Tasks Classloader

解决了这个问题
<taskdef resource="net/jtools/classloadertask/antlib.xml" 
    classpath="ant-classloadertask.jar"/>
<!-- now you can load activation.jar and mail.jar into the project's classpath -->
<classloader loader="project">
    <classpath>
        <pathelement path="lib/activation.jar"/>
        <pathelement path="lib/mail.jar"/>
    </classpath>
</classloader>