Maven座標、依賴的介紹之傳送郵件示例專案
什麼是座標?
最早聽到座標是在數學幾何中,比如在一個平面座標系中(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的依賴管理了
示例:
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>2.5.6</version>
使用Maven一步步構建第一個實際應用,此處使用一個傳送郵件的案例來進行介紹
一:首先編寫pom.xml
程式碼清單:
A.上述groupId:com.kafei可以理解為com.kafei是公司名稱或者一個開發組織。<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.kafei</groupId> <artifactId>sendmail</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>sendmail project</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.1</version> </dependency> <dependency> <groupId>com.icegreen</groupId> <artifactId>greenmail</artifactId> <version>1.3.1b</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> </dependencies> </project>
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
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- 配置載入屬性檔案的元件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:service.properties" />
</bean>
<!-- 配置傳送郵件的協議、埠、主機、使用者名稱、密碼、是否需要認證等屬性 -->
<bean id="javaMailSenderImpl" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="protocol" value="${email.protocol}" /><!--傳送郵件使用的協議 -->
<property name="host" value="${email.host}" /><!--郵件伺服器 -->
<property name="port" value="${email.port}" /><!--郵件監控埠 -->
<property name="username" value="${email.username}" /><!--郵件賬戶名 -->
<property name="password" value="${email.password}" /><!--郵件賬戶密碼 -->
<property name="defaultEncoding" value="${email.defaultEncoding}" /><!--郵件內容編碼,防止傳送中文出現亂碼 -->
<property name="javaMailProperties">
<props>
<prop key="mail.${email.protocol}.auth">${email.auth}</prop><!--是否需要認證 -->
</props>
</property>
</bean>
<!--配置傳送郵件的業務實現類,目的是注入 javaMailSenderImpl,設定傳送郵件的系統郵件地址-->
<bean id="accountEmailServiceImpl"
class="com.kafei.sendmail.AccountEmailServiceImpl">
<property name="javaMailSender" ref="javaMailSenderImpl" /><!-- 注入javaMailSenderImpl -->
<property name="systemEmail" value="${email.systemEmail}" />
</bean>
</beans>
在配置了屬性檔案的元件後,還沒有建立名為service.properties的屬性檔案,屬性檔案資訊如下:
#傳送郵件使用的協議
email.protocol=smtp
#郵件伺服器
email.host=smtp.qq.com
#郵件監控埠
email.port=25
#郵件賬戶名
[email protected]
#郵件賬戶密碼
email.password=xxxxxx
#郵件內容編碼,防止傳送中文出現亂碼
email.defaultEncoding=UTF-8
#是否需要認證
email.auth=true
#郵件傳送地址,一般和郵件賬戶名相同
[email protected]
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( "[email protected]", "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 = "<h3>我們累了</h3>";
accountEmailService.sendMail( "[email protected]", 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對應起來學習。
相關推薦
Maven座標、依賴的介紹之傳送郵件示例專案
什麼是座標? 最早聽到座標是在數學幾何中,比如在一個平面座標系中(X、Y),表示該平面上與X軸的距離為Y,與Y軸的距離為X的一點, 任何一個座標都能夠唯一標識該平面中的一點。在實際生活中,比如說網上購物,你在下訂單的時候寫上家庭住址,然後快遞員 就能夠根據地址送貨上門,其實
程式碼珍藏之傳送郵件
/** * 傳送重置密碼郵件 * @return */ @RequestMapping(params="sendResetPwdMail") @ResponseBody public AjaxJson sendResetPwdMail(String email,HttpServletRequest reque
monkeyrunner入門之傳送郵件(四)
這裡我已Gmail為例,道理都是一樣的 device.touch裡面的數字是手機螢幕的座標,手機螢幕的座標這樣得知: 開啟設定–系統—開發者選項–指標座標 device.type模擬鍵盤輸入內容 提供可複製程式碼: #coding:utf-8 #儲存檔案格式記得選擇utf-8
Nodejs之傳送郵件nodemailer
nodejs郵件模組nodemailer的使用說明 1.介紹 nodemailer是node的一個傳送郵件的元件,其功能相當強大,普通郵件,傳送附件,郵件加密等等都能實現,而且操作也十分方便。 nodemailer在GitHub上的專案地
Jenkins持續整合之傳送郵件
最近專案中需要實現Jenkins上構建完成後自動傳送郵件,在網上搜了一些資料,多多少少有些問題,現在把自己的經驗分享一下。 大概步驟:系統管理—>系統設定—>郵件通知 點選高階,下面
Django專案之傳送郵件
傳送郵件配置資訊 Django中內建了郵件傳送功能,被定義在django.core.mail模組中。傳送郵件需要使用SMTP伺服器,常用的免費伺服器有:163、126、QQ,下面以163郵件為例。 1)登入後設置-POP3/SMTP/IMAP。 2)在新頁面中點
用java開發Email工具之傳送郵件
作者:馮睿 本文介紹瞭如何利用Java的網路API來實現一個電子郵件工具程式。通常Email工具都是使用SMTP(簡單郵件傳輸協議, Simple Mail Transfer Protocol)來傳送郵件,使用POP3協議來接受電子郵件。在本文中只對這兩個協議作簡單介紹。
Web應用安全之傳送郵件
To為收件人,Subject為標題,From為發件人地址。郵件頭注入的主要原因與HTTP訊息頭注入漏洞類似。訊息頭中各欄位以換行符分開,因此,如果能夠在外界傳入的引數插入換行符,那麼就可以新增新的訊息頭
利用JavaMail傳送郵件示例
最近閒來無事,為了鞏固一下知識點,寫了一個利用JavaMail傳送郵件的例子。只寫了一個傳送的例子,以後有時間再寫下接收的例子。 1、簡單介紹一下JavaMail的傳送步驟 根據郵件會話屬性和密碼驗證器構造一個傳送郵件的session會話 通過session會話
Java mail傳送郵件示例
package com.zhangxueliang.demo; import java.util.*; import javax.mail.*; import javax.mail.Message.R
maven pom新增依賴,但是jar無法加入專案
今天在開發新專案的時候,需要引用其他子專案,於是將引用的子專案打包成jar,但是專案中一直無法引入相應的子專案jar。 最後解決方法(eclipse下): 1、project->右擊->Maven->Update Project,如此便可解決(我只操作
(二)Maven的座標和依賴&利用Maven實現郵件傳送
本文中將《Maven實戰》中對座標和依賴的定義展示給初學Maven的程式猿們,並加上書中例項展示,具體詳細請購買《Maven實戰》--許曉斌著,更加詳細的學習Maven。 座標詳解 groupld:定義當前Maven項口隸屬的實際項口。首先,Maven 專案和實際專案不一
Maven學習(二):屬性、座標與依賴
前言: 1、pom檔案的配置,主要內容為屬性、座標與依賴、外掛、倉庫以及其他一些配置。 2、理解這些配置的內容,在一定程度上也就理解了Maven 的使用。 一、屬性 (一)Maven內建屬性: 1、${basedir} 專案根目錄,即包含 pom.xml 的目錄。 2、${v
Jenkins+maven+git 實現自動構建、許可權管理、靜態程式碼檢測、遠端部署、傳送郵件功能
Jenkins配置 1. 使用者許可權設定 配置->Configure Global Security (注:想讓匿名使用者可以瀏覽jenkins網站 需勾選Overall 中的read 和 Job
maven插件介紹之maven-jar-plugin
content letter post end version class pid 技術交流 cut maven-jar-plugin 插件的maven依賴為: <dependency> <groupId>org.apache.maven
170525、解決maven隱式依賴包版本問題
想想 是我 依賴包 cnblogs 可能 com sca dubbo ron 今天在使用dubbo2.5.3版本的時候,啟動項目的時候發現一個問題,tomcat啟動一直報錯 Caused by: java.lang.IllegalStateException: Contex
自動化運維工具之SaltStack-1、SaltStack介紹及安裝
自動生成 模塊 模糊匹配 mini 說明 pac roc redhat 通信 1、SaltStack簡介 官方網址:http://www.saltstack.com官方文檔:http://docs.saltstack.comGitHub:https:github.com/s
Java註解之Retention、Documented、Target介紹
javadoc 聲明 示例 class 文件 con dash tor 描述 先看代碼,後面一個個來解析: @Retention(RetentionPolicy.RUNTIME) @Target(value = {ElementType.METHOD, Elemen
python—day58 Django介紹 之模板補充、路由
自定義filter 函數 自定義 pan 介紹 tro Go ... 定義 Filter: 1.內置: filter 1.{{ value|date:‘Y-m-d H:i:s‘ }} 2. ... 2.自定義filter 1.在app新建一個
Maven的座標與依賴
(尊重勞動成果,轉載請註明出處:https://blog.csdn.net/qq_25827845/article/details/83628045冷血之心的部落格) 快速導航: Maven基礎概念和安裝配置教程 Maven的倉庫和settings.xml配置檔案 Maven的座