Maven是项目进行模型抽象,充分运用的面向对象的思想,Maven可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。
maven对项目的第三方构件(jar包)进行统一管理。向工程中加入jar包不要手工从其它地方拷贝,通过maven定义jar包的坐标,自动从maven仓库中去下载到工程中。(很重要)
maven提供一套对项目生命周期管理的标准,开发人员、和测试人员统一使用maven进行项目构建。项目生命周期管理:编译、测试、打包、部署、运行。
maven对工程分模块构建,提高开发效率。
仓库名称 | 作用 |
---|---|
本地仓库 | 相当于缓存,工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在程序员的电脑上)。第二次不需要从远程仓库去下载。先从本地仓库找,如果找不到才会去远程仓库找。 |
中央仓库 | 就是远程仓库,仓库中jar由专业团队(maven团队)统一维护。中央仓库的地址:http://repo1.maven.org/maven2/ |
远程仓库 | 在公司内部架设一台私服,其它公司架设一台仓库,对外公开。 |
Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。坐标的定义元素如下:
例如:引用BeanUtils框架
<dependency>
<groupId>commons-beanutilsgroupId>
<artifactId>commons-beanutilsartifactId>
<version>1.9.1version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.6version>
dependency>
将Maven压缩包解压,即安装完毕
在maven的安装目录中conf/ settings.xml文件,在这里配置本地仓库
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>D:/java/LocalRepository/repositorylocalRepository>
打开cmd本地控制台,输入mvn -version
解决maven构建卡住的问题:
1再设置如下VM Options: -DarchetypeCatalog=internal。注意是File 菜单的Other settings - Default settings.
如果配置了第一步就已经生效了,可以不用配置第二步。
2.将"archetype-catalog.xml"放置到"C:\Users\Administrator.m2\repository\org\apache\maven*archetype*\archetype-catalog\3.0.1 "下
第3章中,在创建javaweb工程时,使用的是maven-archetype-webapp骨架,如果不使用骨架,怎样创建一个javaweb工程呢,见下面的讲解:
修改settings文件中的项目编译版本
jdk1.8
true
1.8
1.8
1.8
1.8
UTF-8
清除编译产生的target文件夹内容,可以配合相应命令一起使用,如mvn clean package, mvn clean test
该命令可以对src/main/java目录的下的代码进行编译
测试命令,或执行src/test/java/下junit的测试用例
mvn package,打包项目
打包后的项目会在target目录下找到
如果要使用maven对web工程进行打包,我们要添加servlet的依赖
javax.servlet
javax.servlet-api
3.1.0
mvn install,打包后将其安装在本地仓库
安装完毕后,在本地仓库中可以找到itheima_javase_demo的信息
Maven是一个核心引擎,提供了基本的项目处理能力和建设过程的管理,以及一系列的插件是用来执行实际建设任务。maven插件可以完成一些特定的功能。例如,集成jdk插件可以方便的修改项目的编译环境;集成tomcat插件后,无需安装tomcat服务器就可以运行tomcat进行项目的发布与测试。在pom.xml中通过plugin标签引入maven的功能插件。
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.2version>
<configuration>
<source>1.7source>
<target>1.7target>
<encoding>UTF-8encoding>
<showWarnings>trueshowWarnings>
configuration>
plugin>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<port>8833port>
<path>/path>
configuration>
plugin>
tomcat插件注意问题
Maven的中央仓库中只有Tomcat7.X版本的插件,而之前我们使用的是8.X的版本,如果想使用Tomcat8.X的插件可以去其他第三方仓库进行寻找,或者使用IDEA集成外部Tomcat8极其以上版本,进行项目的发布。
导入依赖坐标,无需手动导入jar包就可以引入jar。在pom.xml中使用标签引入依赖。
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>3.8.1version>
<scope>testscope>
dependency>
import org.junit.Test;
public class DemoTest {
@Test
public void test1(){
System.out.println("test running...");
}
}
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
dependency>
compile 编译、测试、运行,A在编译时依赖B,并且在测试和运行时也依赖
例如:strus-core、spring-beans。打到war包或jar包
provided 编译、和测试有效,A在编译和测试时需要B
例如:servlet-api就是编译和测试有用,在运行时不用(tomcat容器已提供)
不会打到war
runtime:测试、运行有效
例如:jdbc驱动包 ,在开发代码中针对java的jdbc接口开发,编译不用
在运行和测试时需要通过jdbc驱动包(mysql驱动)连接数据库,需要的
会打到war
test:只是测试有效,只在单元测试类中用
例如:junit
不会打到war
按照依赖强度,由强到弱来排序:(理解)
compile> provided> runtime> test
修改不使用骨架创建的maven项目的jdk版本问题
jdk1.8
true
1.8
1.8
1.8
1.8
UTF-8
完成添加客户信息的操作
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>cn.itcatgroupId>
<artifactId>maven_testartifactId>
<packaging>warpackaging>
<version>1.0-SNAPSHOTversion>
<name>maven_test Maven Webappname>
<url>http://maven.apache.orgurl>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.40version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>5.0.2.RELEASEversion>
<scope>compilescope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.0.2.RELEASEversion>
<scope>compilescope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>5.0.2.RELEASEversion>
<scope>compilescope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>5.0.2.RELEASEversion>
<scope>compilescope>
dependency>
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.2version>
<scope>compilescope>
dependency>
<dependency>
<groupId>commons-beanutilsgroupId>
<artifactId>commons-beanutilsartifactId>
<version>1.9.3version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.6version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.2version>
<configuration>
<source>1.7source>
<target>1.7target>
<encoding>UTF-8encoding>
configuration>
plugin>
plugins>
build>
project>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
客户录入页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
save success!!!
package com.itheima.bean;
/**
* 包名:com.itheima.bean
* 作者:Leevi
* 日期2018-07-23 21:52
*/
public class Customer {
private Long cust_id;
private String cust_name;
private String cust_source;
private String cust_level;
private String cust_industry;
private String cust_address;
private String cust_phone;
public Long getCust_id() {
return cust_id;
}
public void setCust_id(Long cust_id) {
this.cust_id = cust_id;
}
public String getCust_name() {
return cust_name;
}
public void setCust_name(String cust_name) {
this.cust_name = cust_name;
}
public String getCust_source() {
return cust_source;
}
public void setCust_source(String cust_source) {
this.cust_source = cust_source;
}
public String getCust_level() {
return cust_level;
}
public void setCust_level(String cust_level) {
this.cust_level = cust_level;
}
public String getCust_industry() {
return cust_industry;
}
public void setCust_industry(String cust_industry) {
this.cust_industry = cust_industry;
}
public String getCust_address() {
return cust_address;
}
public void setCust_address(String cust_address) {
this.cust_address = cust_address;
}
public String getCust_phone() {
return cust_phone;
}
public void setCust_phone(String cust_phone) {
this.cust_phone = cust_phone;
}
}
package com.itheima.maven.web;
import com.itheima.maven.domain.Customer;
import com.itheima.maven.service.CustomerService;
import com.itheima.maven.service.impl.CustomerServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/SaveCustomer")
public class SaveCustomerServlet extends HttpServlet {
private CustomerService customerService = new CustomerServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接收参数
req.setCharacterEncoding("utf-8");
String custName = req.getParameter("custName");
String custSource = req.getParameter("custSource");
String custLevel = req.getParameter("custLevel");
String custIndustry = req.getParameter("custIndustry");
String custPhone = req.getParameter("custPhone");
//封装数据
Customer customer = new Customer();
customer.setCustName(custName);
customer.setCustIndustry(custIndustry);
customer.setCustPhone(custPhone);
customer.setCustLevel(custLevel);
customer.setCustSource(custSource);
//调用业务
customerService.save(customer);
//重定向
resp.sendRedirect(req.getContextPath()+"/success.jsp");
}
}
package com.itheima.maven.service;
import com.itheima.maven.domain.Customer;
public interface CustomerService {
public void save(Customer customer);
}
package com.itheima.maven.service.impl;
import com.itheima.maven.dao.CustomerDao;
import com.itheima.maven.dao.impl.CustomerDaoImpl;
import com.itheima.maven.domain.Customer;
import com.itheima.maven.service.CustomerService;
public class CustomerServiceImpl implements CustomerService{
private CustomerDao customerDao = new CustomerDaoImpl();
@Override
public void save(Customer customer) {
customerDao.save(customer);
}
}
package com.itheima.maven.dao;
import com.itheima.maven.domain.Customer;
public interface CustomerDao {
void save(Customer customer);
}
package com.itheima.maven.dao.impl;
import com.itheima.maven.dao.CustomerDao;
import com.itheima.maven.domain.Customer;
import com.itheima.maven.utils.JdbcUtils;
import org.springframework.jdbc.core.JdbcTemplate;
public class CustomerDaoImpl implements CustomerDao {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils.getDataSource());
@Override
public void save(Customer customer) {
String sql = "insert into cst_customer(cust_name,cust_source,cust_industry,cust_level,cust_phone) " +
"values(?,?,?,?,?)";
//执行查询操作
jdbcTemplate.update(
sql,
customer.getCustName(),
customer.getCustSource(),
customer.getCustIndustry(),
customer.getCustLevel(),
customer.getCustPhone());
}
}
package com.itheima.maven.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/*
1. 声明静态数据源成员变量
2. 创建连接池对象
3. 定义公有的得到数据源的方法
4. 定义得到连接对象的方法
5. 定义关闭资源的方法
*/
public class JdbcUtils {
// 1. 声明静态数据源成员变量
private static DataSource ds;
// 2. 创建连接池对象
static {
// 加载配置文件中的数据
InputStream is = JdbcUtils.class.getResourceAsStream("/druid.properties");
Properties pp = new Properties();
try {
pp.load(is);
// 创建连接池,使用配置文件中的参数
ds = DruidDataSourceFactory.createDataSource(pp);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
// 3. 定义公有的得到数据源的方法
public static DataSource getDataSource() {
return ds;
}
// 4. 定义得到连接对象的方法
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
// 5.定义关闭资源的方法
public static void close(Connection conn, Statement stmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {}
}
}
// 6.重载关闭方法
public static void close(Connection conn, Statement stmt) {
close(conn, stmt, null);
}
}
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/maven
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
maxIdle=6
minIdle=3
什么是多例设计模式:一个类,每次都会创建一个对象
什么是单例设计模式:整个项目中只有一个该类对象
如果一个类有成员变量,最好不要使用单例模式