Maven聚合開(kāi)發(fā)實(shí)例詳解
一、Maven聚合開(kāi)發(fā)_繼承關(guān)系
Maven中的繼承是針對(duì)于父工程和子工程。父工程定義的依賴(lài)和插件子工程可以直接使用。注意父工程類(lèi)型一定為POM類(lèi)型工程。
多繼承
在Maven中對(duì)于繼承采用的也是單繼承,也就是說(shuō)一個(gè)子項(xiàng)目只能有一個(gè)父項(xiàng)目。但我們可以在 <dependencyManagement> 配置多繼承的。
寫(xiě)法如下:
二、Maven聚合案例
1. 搭建dao模塊
dao子工程中一般寫(xiě)實(shí)體類(lèi)和dao層:
在父工程下創(chuàng)建maven模塊,不選擇模板,創(chuàng)建時(shí)一定要選擇父工程。
子模塊的pom文件中寫(xiě)入父工程證明繼承成功。 如下圖所示:
準(zhǔn)備數(shù)據(jù)庫(kù)
//新建數(shù)據(jù)庫(kù) CREATE DATABASE student; //建表 CREATE TABLE student( id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, name varchar(255) DEFAULT NULL, sex varchar(10) DEFAULT NULL, address varchar(255) DEFAULT NULL )ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 //插入數(shù)據(jù) insert into student values(1,'幾何心涼','男','北京'); insert into student values(2,'哈士奇','女','上海');
編寫(xiě)實(shí)體類(lèi) Student
package com.mavenstudy.pojo; public class Student { private int id; private String name; private String sex; private String address; public Student(){ } public Student(int id, String name, String sex, String address) { this.id = id; this.name = name; this.sex = sex; this.address = address; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Student [" + "id=" + id + ", name='" + name + '\'' + ", sex='" + sex + '\'' + ", address='" + address + '\'' + ']'; } }
在resources中編寫(xiě)連接數(shù)據(jù)庫(kù)的配置文件db.properties,
編寫(xiě)dao類(lèi)和對(duì)應(yīng)的方法
package com.mavenstudy.dao; import com.mavenstudy.pojo.Student; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.Properties; public class StudentDao { //查詢(xún)所有學(xué)生 public List<Student> findAll() throws Exception{ //讀取配置文件 Properties properties = new Properties(); InputStream is = this.getClass().getClassLoader().getResourceAsStream("db.properties"); properties.load(is); String url = properties.getProperty("jdbc.url"); String user = properties.getProperty("jdbc.user"); String password = properties.getProperty("jdbc.password"); //查詢(xún)數(shù)據(jù)庫(kù) Connection connection = DriverManager.getConnection(url,user,password); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("select * from student"); //處理結(jié)果集 List<Student> students = new ArrayList<>(); while(resultSet.next()){ int id = resultSet.getInt(1); String name = resultSet.getString(2); String sex = resultSet.getString(3); String address = resultSet.getString(4); Student student = new Student(id,name,sex,address); students.add(student); } //釋放資源 resultSet.close(); statement.close(); connection.close(); return students; } }
測(cè)試dao方法 這里我們可以用到Junit這個(gè)注解來(lái)幫我們測(cè)試
現(xiàn)在讓我們來(lái)運(yùn)行一下是否真的能夠執(zhí)行吧!
OK!,確實(shí)是沒(méi)有問(wèn)題的,那接下來(lái)我們搭建service模塊
2. 搭建service模塊
service子工程中一般寫(xiě)service層的內(nèi)容,也需要繼承父工程,由于需要調(diào)用dao子工程的方法,所以需要導(dǎo)入dao子工程的依賴(lài)。
在父工程下創(chuàng)建maven模塊,不選擇模板,選擇父工程。(這里和上面都是一樣的就不截圖了)
在service模塊的pom文件中引入dao子工程的依賴(lài)。
<dependencies> <dependency> <groupId>com.mavenstudy</groupId> <artifactId>maven_demo2_dao</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
編寫(xiě)Service類(lèi)和對(duì)應(yīng)的方法
package com.mavenstudy.service; import com.mavenstudy.dao.StudentDao; import com.mavenstudy.pojo.Student; import java.util.List; public class StudentService { private StudentDao studentDao = new StudentDao(); public List<Student> findAllStudent() throws Exception{ return studentDao.findAll(); } }
編寫(xiě)測(cè)試service方法
package com.mavenstudy.service; import com.mavenstudy.pojo.Student; import org.junit.Test; import java.util.List; public class StudentServiceTest { //測(cè)試findAllStudent @Test public void findAllStudentTest() throws Exception { StudentService studentService = new StudentService(); List<Student> students = studentService.findAllStudent(); students.forEach(System.out::println); } }
測(cè)試結(jié)果
OK!結(jié)果還是和我們預(yù)想的一樣,接下來(lái)讓我們搭建web模塊吧!
3. 搭建web模塊
web子工程中一般要寫(xiě)控制器和前端頁(yè)面的內(nèi)容。它不是普通的java工程,而是一個(gè)web工程,需要繼承父工程,導(dǎo)入service子工程的依賴(lài)。
在父工程下創(chuàng)建maven模塊,選擇web工程模板,選擇父工程。
創(chuàng)建好后,添加父工程,刪除pom文件中的jdk編譯版本,刪掉junit依賴(lài),引入service依賴(lài)。
<dependencies> <dependency> <groupId>com.mavenstudy</groupId> <artifactId>maven_demo2_service</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
編寫(xiě)控制器,F(xiàn)indAllStudentServlet類(lèi)
package com.mavenstudy.servlet; import com.mavenstudy.pojo.Student; import com.mavenstudy.service.StudentService; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; @WebServlet("/allStudent") public class FindAllStudentServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { StudentService studentService = new StudentService(); List<Student> students = null; try { students = studentService.findAllStudent(); } catch (Exception e) { e.printStackTrace(); } req.setAttribute("students",students); req.getRequestDispatcher("allStudent.jsp").forward(req,resp); } }
編寫(xiě)JSP頁(yè)面 ,其中我們需要用到EL表達(dá)式,但是maven是默認(rèn)不識(shí)別EL表達(dá)式的,所以我們需要加上一個(gè)屬性 isELIgnored="false" 和 一個(gè)引入
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
顯示所有學(xué)生信息的jsp頁(yè)面
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title> 全部學(xué)生 </title> </head> <body> <table align="center" border="1" cellspacing="0" cellpadding="0" width="500px"> <tr> <th>id</th> <th>姓名</th> <th>性別</th> <th>地址</th> </tr> <c:forEach items="${students}" var="student"> <tr> <td>${student.id}</td> <td>${student.name}</td> <td>${student.sex}</td> <td>${student.address}</td> </tr> </c:forEach> </table> </body> </html>
4. 運(yùn)行項(xiàng)目
配置tomcat插件運(yùn)行父工程,此時(shí)會(huì)自動(dòng)聚合運(yùn)行項(xiàng)目。
點(diǎn)開(kāi)配置tomcat7插件
OK!配置完點(diǎn)擊運(yùn)行按鈕即可 ,下面就是運(yùn)行結(jié)果
到此這篇關(guān)于Maven聚合開(kāi)發(fā)的文章就介紹到這了,更多相關(guān)Maven聚合開(kāi)發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
@Accessors(chain = true)注解報(bào)錯(cuò)的解決方案
這篇文章主要介紹了@Accessors(chain = true)注解報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java后端Tomcat實(shí)現(xiàn)WebSocket實(shí)例教程
WebSocket protocol 是HTML5一種新的協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信(full-duplex)。一開(kāi)始的握手需要借助HTTP請(qǐng)求完成握手。本文給大家介紹Java后端Tomcat實(shí)現(xiàn)WebSocket實(shí)例教程,感興趣的朋友一起學(xué)習(xí)吧2016-05-05Java關(guān)鍵字instanceof的兩種用法實(shí)例
這篇文章主要介紹了Java關(guān)鍵字instanceof的兩種用法實(shí)例,本文給出了instanceof關(guān)鍵字用于判斷一個(gè)引用類(lèi)型變量所指向的對(duì)象是否是一個(gè)類(lèi)(或接口、抽象類(lèi)、父類(lèi))及用于數(shù)組比較,需要的朋友可以參考下2015-03-03搜索一文入門(mén)ElasticSearch(節(jié)點(diǎn) 分片 CRUD 倒排索引 分詞)
這篇文章主要為大家介紹了搜索一文入門(mén)ElasticSearch(節(jié)點(diǎn) 分片 CRUD 倒排索引 分詞)的基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Java Thread之Sleep()使用方法總結(jié)
這篇文章主要介紹了Java Thread之Sleep()使用方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05JAXB命名空間及前綴_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要給大家介紹了關(guān)于JAXB命名空間及前綴的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08java類(lèi)加載機(jī)制、類(lèi)加載器、自定義類(lèi)加載器的案例
這篇文章主要介紹了java類(lèi)加載機(jī)制、類(lèi)加載器、自定義類(lèi)加載器的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02java打包成可執(zhí)行的jar或者exe的詳細(xì)步驟
Java程序完成以后,對(duì)于Windows操作系統(tǒng),習(xí)慣總是想雙擊某個(gè)exe文件就可以直接運(yùn)行程序,現(xiàn)我將一步一步的實(shí)現(xiàn)該過(guò)程.最終結(jié)果是:不用安裝JRE環(huán)境,不用安裝數(shù)據(jù)庫(kù),直接雙擊一個(gè)exe文件,就可以運(yùn)行程序2014-04-04MyBatis快速入門(mén)(簡(jiǎn)明淺析易懂)
MyBatis是支持普通SQL查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。mybatis的學(xué)習(xí)是程序員的必修課。今天小編通過(guò)分享本教程幫助大家快速入門(mén)mybatis,對(duì)mybatis入門(mén)知識(shí)感興趣的朋友參考下吧2016-11-11