我有以下蚂蚁邮件任务-
<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和activationjar。比如如果我可以在这个目标中指定来自的类路径。
现在,当我执行这个目标时,我总是遇到异常-
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
你也可以用这个信息从蚂蚁本身调用蚂蚁,这可能有点难看:
<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(。然后,每个团队成员的工作空间中都有该模块,只需使用CCD_ 2以使这些依赖关系可用于蚂蚁。
这里已经回答了一个不错的方法。它使用Ant任务类加载器解决了这个问题:
<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>