Michael Ludwig schrieb am 19.01.2011 um 13:51 (+0100):
> Patrick Martin schrieb am 19.01.2011 um 10:31 (+0100):
> > D:\tmp\build.xml:7: taskdef A class needed by class
> > org.apache.tools.ant.taskdefs.email.MimeMailer cannot be found:
> > javax/mail/MessagingException
> >  using the classloader AntClassLoader[D:\tmp\a\activation.jar]
> 
> Only activation.jar in this classloader. But even when I put all
> required JARs into that custom classloader, it fails:
> 
>     <path id="mail.path">
>         <pathelement location="${ant.home}/lib/ant-javamail.jar" />
>         <pathelement location="${javamail.dir}/mail.jar" />
>         <fileset dir="${javamail.dir}/lib">
>             <include name="**/*.jar"/>
>         </fileset>
>         <pathelement location="${jlb.dir}/activation.jar" />
>     </path>
> 
>     <taskdef name="mymail"
>         classpathref="mail.path"
>         classname="org.apache.tools.ant.taskdefs.email.EmailTask" />
> 
> T:\MiLu\mail-jar.xml:25: java.lang.ClassNotFoundException: 
> javax.mail.internet.MimeMessage
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:169)
>         at 
> org.apache.tools.ant.taskdefs.email.EmailTask.execute(EmailTask.java:452)
>         at 
> org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at 
> org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
>         at org.apache.tools.ant.Task.perform(Task.java:348)
>         at org.apache.tools.ant.Target.execute(Target.java:390)
>         at 
> org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:179)
>         at 
> org.apache.tools.ant.ProjectHelper.configureProject(ProjectHelper.java:82)
>         at org.apache.tools.ant.Main.runBuild(Main.java:786)
>         at org.apache.tools.ant.Main.startAnt(Main.java:218)
>         at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
>         at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
> 
> It seems you have to use the main classloader, not a self-defined one.
> But I might be wrong. And even if not, I don't know why. For the
> experts to clarify.

Okay, thanks to the <ClassloaderTask>, it now works. (See script.)

But I still haven't understood the underlying issue. What's so special about
mail.jar that it needs special treatment?

I noticed its MANIFEST.MF contains lots of checksums. Do they cause problems
for additional classloaders defined in Ant?

  Name: javax/mail/search/SearchTerm.class
  SHA1-Digest: JveDH0FF1JcVa7wJL7mLJ48Vwd4=

Here's the working script:

<!-- vim: set filetype=ant: -->
<project>
        <property name="jlb.dir" location="G:\JLib"/>
        <property name="javamail.dir" location="${jlb.dir}/javamail-1.4.1"/>

        <path id="mail.path">
                <pathelement location="${javamail.dir}/mail.jar" />
                <!-- not needed:
                <fileset dir="${javamail.dir}/lib"><include 
name="**/*.jar"/></fileset>
                <pathelement location="${jlb.dir}/activation.jar" />
                -->
        </path>

        <!-- http://enitsys.sourceforge.net/ant-classloadertask/ -->
        <!-- JAR liegt in ~/.ant/lib -->
        <taskdef name="classloadertask"
                classname="org.apache.tools.ant.taskdefs.ClassloaderTask"/>
        <!-- nachrüsten -->
        <classloadertask classpathRef="mail.path" loader="thread"/>

        <property name="address" value="t...@gmx.de"/>
        <property name="password" value="secret"/>

        <mail from="${address}"
                mailhost="mail.gmx.de" ssl="yes" mailport="465"
                user="${address}" password="${password}"
                subject="Ant Mail Test">
                <to address="t...@yahoo.de"/>
        </mail>
</project>

-- 
Michael Ludwig

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org

Reply via email to