Мне все еще не хватает представителя, чтобы добавить комментарий, поэтому мне придется опубликовать другой ответ. :)
Похоже, что MailSender.class загружается в Tomcat, а не в каждое отдельное веб-приложение. Сначала WebApp2 загружает его, и он работает, даже если он загружен во все Tomcat, не являющиеся частными для WebApp2. Когда WebApp1 нужен класс, он уже видит его загруженным в родительский Tomcat и не пытается загрузить один закрытый в WebApp1.
Сначала я бы предложил вам проверить каталоги Tomcat, JRE и т. Д., Чтобы выяснить, есть ли в этих путях копия jar или класса. После этого я вручную удалил класс из каждого из двух jar-файлов и перезапустил Tomcat или веб-приложения, чтобы посмотреть, что произойдет - вы ожидаете, что он завершится неудачно и произведет трассировку стека, и это скажет вам, где ваш класс загружается впервые. и кто пытается загрузить его. (Например, из имени класса, возможно, у вас есть почтовый API, загруженный в JVM Tomcat, который загружает класс - в Tomcat, а не в ваше веб-приложение).