我有跟踪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
答案 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>