繁体   English   中英

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

[英]ant mail task using mail and activation jar in external location

我有以下蚂蚁邮件任务 -

<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

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

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

Ant有一个命令行参数来指定一个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添加到任务的运行定义中,并与其他开发人员共享此运行定义。

请参阅此答案以获取类似问题 ,以获取ant中库依赖关系的解决方案。

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

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

有一个很好的方法已经在这里得到解答 它使用Ant Tasks类加载器解决了这个问题:

<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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM