博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven坐标、依赖的介绍之发送邮件示例项目
阅读量:6411 次
发布时间:2019-06-23

本文共 6923 字,大约阅读时间需要 23 分钟。

hot3.png

什么是坐标?

最早听到坐标是在数学几何中,比如在一个平面坐标系中(X、Y),表示该平面上与X轴的距离为Y,与Y轴的距离为X的一点,

任何一个坐标都能够唯一标识该平面中的一点。在实际生活中,比如说网上购物,你在下订单的时候写上家庭住址,然后快递员

就能够根据地址送货上门,其实这个地址也可以理解为坐标。

在Maven中,坐标为各种构件引入了秩序,任何一个构件都必须明确定义自己的坐标,只有定义了坐标后其它项目在需要使用你的项目或者模块时,才能够准确定位引入。

而Maven坐标中是通过一些元素来定义的,他们是:groupId、artifactId、version、packaging、clas-sifier。

1.groupId:定义当前项目属于的实际项目.如:org.springframework

2.artifactId:定义项目的名称或者可一说是模块名称,这是由于Maven中模块的概念如:spring-core、spring-beans

3.version:定义项目的版本

4.packaging:默认为Jar

5.clas-sifier:该元素用来帮助定义构建输出的一些附属组件。

注:上述5个元素中,前三个是必须定义的,packaging在不明确定义的时候默认为Jar,clas-sifier是不能直接定义的。

理解城市中地址的定义方式后就可以让快递员为我们工作了,同时,理解清楚Mavne坐标后,我们就可以能开始讨论Maven的依赖管理了

示例:

org.springframework
spring-core
2.5.6

使用Maven一步步构建第一个实际应用,此处使用一个发送邮件的案例来进行介绍

一:首先编写pom.xml

代码清单:

4.0.0
com.kafei
sendmail
0.0.1-SNAPSHOT
jar
sendmail project
http://maven.apache.org
org.springframework
spring-core
2.5.6
org.springframework
spring-beans
2.5.6
org.springframework
spring-context
2.5.6
org.springframework
spring-context-support
2.5.6
javax.mail
mail
1.4.1
com.icegreen
greenmail
1.3.1b
test
junit
junit
4.7
test
A.上述groupId:com.kafei可以理解为com.kafei是公司名称或者一个开发组织。

B.artifactId:sendmail可以理解为项目的名称。

C.version:0.0.1-SNAPSHOT可以理解为项目的版本,表示该项目正在开发中,还不稳定。

综合可以这样理解:com.kafei公司下有一个名为sendmail的项目,而且他还处于开发阶段,这样说的意思是com.kafei公司可能还有其他开发的项目,这只是其中之一。

D.再看dependencies元素,其中包含了多个dependency子元素,这是POM定义项目依赖的位置。

E.以第一个依赖为例groupId、artifactId、version为org.springframework、spring-core、2.5.6,这便是依赖的坐标,任何一个Maven都需要定义自己的坐标,当这个Maven

项目成为其他Maven项目依赖的时候,这组坐标就体现了其价值。

F.在dependency元素中有一个依赖为javax.mail mail 1.4.1这是实现发送必须的类库。

G.在dependency元素中有一个依赖为junit junit 4.7 test,这是JAVA实现单元测试的标准。这个依赖特殊的地方在于多了scope子元素,scope是用来定义依赖范围的。

这里的意思是此依赖只会服务于测试。同样com.icegreen、greenmail、1.3.1b、test也只服务于测试。

二:编写主代码

1.业务逻辑接口

package com.kafei.sendmail;/** *  * 邮件发送接口 * */public interface AccountEmailService{	/**	 * 目的:用来发送HTML格式的邮件	 * @param to 接收邮件的地址	 * @param subject 邮件主题	 * @param htmlText 邮件内容	 * @throws AccountEmailException 如果发送邮件失败则抛出异常	 */    void sendMail( String to, String subject, String htmlText )        throws AccountEmailException;}
2.对应该接口的实现类

package com.kafei.sendmail;import javax.mail.MessagingException;import javax.mail.internet.MimeMessage;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;public class AccountEmailServiceImpl implements AccountEmailService {	private JavaMailSender javaMailSender;// 发送邮件的工具类,提供get、set方法,实现依赖注入	private String systemEmail;	public void sendMail(String to, String subject, String htmlText)			throws AccountEmailException {		try {			MimeMessage msg = javaMailSender.createMimeMessage();// 将要发送的邮件			MimeMessageHelper msgHelper = new MimeMessageHelper(msg, "UTF-8");			msgHelper.setFrom(systemEmail);// 设置邮件的发送地址			msgHelper.setTo(to);// 设置邮件收件地址			msgHelper.setSubject(subject);// 设置邮件主题			msgHelper.setText(htmlText, true);// 设置邮件内容			javaMailSender.send(msg);// 执行发送邮件		} catch (MessagingException e) {			throw new AccountEmailException("邮件发送失败", e);		}	}	public JavaMailSender getJavaMailSender() {		return javaMailSender;	}	public void setJavaMailSender(JavaMailSender javaMailSender) {		this.javaMailSender = javaMailSender;	}	public String getSystemEmail() {		return systemEmail;	}	public void setSystemEmail(String systemEmail) {		this.systemEmail = systemEmail;	}}
以上实现类代码中没有邮件服务器配置信息,这些我们都将使用依赖注入进行配置,注入到javaMailSender中。

3.定义名为account-email.xml的配置文件

该配置文件位于src/main/resources/account-email.xml

${email.auth}
在配置了属性文件的组件后,还没有创建名为service.properties的属性文件,属性文件信息如下:

#发送邮件使用的协议email.protocol=smtp#邮件服务器email.host=smtp.qq.com#邮件监控端口email.port=25#邮件账户名email.username=xxxxx@qq.com#邮件账户密码email.password=xxxxxx#邮件内容编码,防止发送中文出现乱码email.defaultEncoding=UTF-8#是否需要认证email.auth=true#邮件发送地址,一般和邮件账户名相同email.systemEmail=xxxxx@qq.com
4.编写测试代码

package com.kafei.sendmail;import static junit.framework.Assert.assertEquals;import javax.mail.Message;import org.junit.After;import org.junit.Before;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.icegreen.greenmail.util.GreenMail;import com.icegreen.greenmail.util.GreenMailUtil;import com.icegreen.greenmail.util.ServerSetup;public class AccountEmailServiceTest{    private GreenMail greenMail;    public GreenMail getGreenMail() {		return greenMail;	}	public void setGreenMail(GreenMail greenMail) {		this.greenMail = greenMail;	}	@Before    public void startMailServer()        throws Exception    {        greenMail = new GreenMail( ServerSetup.SMTP );        //默认和属性文件中的用户名和密码相同,如果配置文件中配置后这里也可以不进行设置。        greenMail.setUser( "xxxxx@qq.com", "xxxxxx" );        greenMail.start();    }    @Test    public void testSendMail()        throws Exception    {        ApplicationContext ctx = new ClassPathXmlApplicationContext( "account-email.xml" );        AccountEmailService accountEmailService = (AccountEmailService) ctx.getBean( "accountEmailServiceImpl" );        String subject = "Maven测试邮件";        String htmlText = "

我们累了

"; accountEmailService.sendMail( "yyyy@msn.com", subject, htmlText ); greenMail.waitForIncomingEmail(2000, 1); // Message[] msgs = greenMail.getReceivedMessages();// System.out.println(greenMail.getReceivedMessages().length);// assertEquals(1, msgs.length );// assertEquals( subject, msgs[0].getSubject() );// assertEquals( htmlText, GreenMailUtil.getBody( msgs[0] ).trim() ); } @After public void stopMailServer() throws Exception { greenMail.stop(); }}

在测试代码中注释掉的部分greenMail.getReceivedMessages();,此处我未测试成功,每次获得长度都是0,不知为何,还请大家指教。

源码下载:

到此为止一个简单的Maven示例就算完成了,可以正常的发送邮件,建议在学习Maven和Ant对应起来学习。

转载于:https://my.oschina.net/ht896632/blog/628455

你可能感兴趣的文章
重构之美-走在Web标准化设计的路上[复杂表单]3 9 Update
查看>>
linux中的优先搜索树的实现--prio_tree【转】
查看>>
转载: 打造自己的asp.net验证控件
查看>>
重构之美-跨越Web标准,触碰语义网[开门见山:Microformat]
查看>>
git入门与实践【转】
查看>>
WPF 虚拟键盘
查看>>
储存卡无法打开专家教您怎么数据恢复
查看>>
彼得原理
查看>>
如何利用【百度地图API】,制作房产酒店地图?(下)——结合自己的数据库...
查看>>
[20171113]修改表结构删除列相关问题3.txt
查看>>
特征选择
查看>>
在Winform程序中设置管理员权限及为用户组添加写入权限
查看>>
RTMP直播到FMS中的AAC音频直播
查看>>
多能互补提速 加快我国能源转型和现代能源体系建设
查看>>
音乐闹钟
查看>>
【uTenux实验】事件标志
查看>>
利用Python进行数据分析(15) pandas基础: 字符串操作
查看>>
busybox inetd tftpd
查看>>
函数可重入性及编写规范
查看>>
Scribe应用实例
查看>>