Maven
maven:
什么是maven:
项目开发过程中:
物流 医疗 电力 通信….需求(项目的业务比较熟悉)项目负责人–编码开发测试(压力测试,黑盒测试 白盒测试……… 测试脚本,测试工具)
具体作用:
1: jar(手动的管理jar包依赖) jar包之间冲突,版本适配。(依赖管理-解决jar文件依赖问题)
2: 如果千万级别项目。Project(业务比较复杂) 拆分子项目(便于开发过程中的控制和管理)。
Maven的配置:
安装Maven之前请先确保已经安装好jdk1.7及以上版本,检测方法,通过DOS命令:javac,如出现下图则安装成功的,没有提示javac不是内部命令请先安装jdk。
下面开始安装maven,本例以3.5.4版本
下载maven,下载地址:http://maven.apache.org/download.cgi
下载后解压,本例解压在C:\AppData\apache-maven-3.5.4,您可以根据需求改为其它路径
配置path环境变量,进入bin目录,拷贝当前路径添加到path环境变量值的未尾,注意使用;号与其它值隔开。本例中是:C:\AppData\apache-maven-3.5.4\bin
4、验证是否安装成功,打开cmd窗口,输入mvn -v,出现下图则表示成功,如提示mvn不是内部命令,请检查环境变量
修改配置文件conf/settings.xml,修改本地仓库的地址,本例中仓库地址为:C:\mavenLocalRepository\one,请先建立好相关目录。
Settings文件的配置:
本地仓库:
maven默认的本地仓库位置:C:\Users\Administrator.m2\repository
可以修改成自己制定的位置为本地仓库
D:/myrepository/repository
制定一个镜像:加速下载jar
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
Maven默认的jdk版本是1.4:改变maven 的jdk版本
jdk-1.8
true
1.8
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
打开cmd窗口,运行mvn -v 命令
打开cmd窗口,运行mvn help:system 命令
如果前面的配置成功,那么C:\mavenLocalRepository\one会出现一些文件。,如下图
Maven和eclipse整合
配置maven: 点击add添加
配置settings.xml文件
如何创建maven工程
1、通过骨架创建java项目
File>new>maven project
点击next
点击next
点击完成
修改pom中的junit
junit
junit
4.12
test
在java>com.offcn.mavenjava中新建Hello
public class Hello {
public void sayHello() {
System.out.println(“hello maven java project”);
}
}
在test>com.offcn.mavenjava中新建TestHello
public class TestHello {
@Test
public void testHello() {
Hello hello=new Hello();
hello.sayHello();
}
}
先中项目>右键>run as>maven test
如果中文件乱码,在pom.xml中添加
-Dfile.encoding=UTF-8
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2、通过骨架创建web
File>new>maven project
点击next
点击next
点击完成
项目与平时我们建web项是一样的,报错是因为没有添加tomcat.选中项目>右键>build path> configure build path>libary>add libary>server runtime>选择中tomcat>aplly
运行与平时web项目一样的操作
3、通过快速模版创建
点击next
选择war
发现报错,需要在webapp下新建WEB-INF与web.xml
Jsp报错是因为主程中没有servlet环境,修改依赖,添加servlet依赖
javax.servlet
servlet-api
3.0-alpha-1
provided
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
使用tomcat插件运行
修改pom文件,添加插件
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
选中项目>右键>run as>maven install
选中项目>右键>run as>maven buid…
运行后出现访问路径
添加依赖:
依赖的格式:通过三个条件锁定一个依赖(坐标)
组名
项目名
版本
如果在项目中出现了jar文件依赖,但是我们的程序在服务器中运行失败的,或者pom.xml文件红色的叉号,查看本地仓库中的包是否下载正确(如果下载不正确,在仓库中会出现一个异常的配置文件,配置文件的名字很长, 项目名-版本号.*****字符),删除本地仓库的配置文件,刷新项目从新下载。
1:添加官方发布的依赖(依赖的坐标,中央仓库-镜像文件–本地仓库-项目)
2:依赖自己开发的内容(将自身的项目作为一个第三方工具发布到maven仓库中-项目)
Maven常用的指令
Maven clean: 清除,清除target目录
Maven compile :编译 检查maven工程中有没有问题。
Maven build: 发布
Maven install: 发布(先清除掉仓库中原来存在依赖,然后再发布)
依赖的传递性
scope:test provided compile(默认忽略的)
打包 部署 运行
test:junit类型jar
测试程序可用
主程序(编译)不可用
不参与打包
不参与部署
不参与运行
Provided: servlet api jsp 依赖
测试程序可用
主程序可用
不参与打包
不参与部署
不参与运行
Compile:
测试程序可用
主程序可用
参与打包
参与部署
参与运行
Scope的值是test provided : 依赖是不能够传递到下一个工程中
Scope的值是Compile 可以将我们当前依赖的内容传递到下一个工程中。
1、新建mavenone
新建类One
2、
public class One {
public void testOne() {
System.out.println(“hello one”);
}
}
3、
4、新建maventwo
5、新建Two
6、
public class Two {
public void testTwo() {
System.out.println(“hello two”);
}
}
3、新建maventhree
public class Three {
public void testThree() {
System.out.println(“hello three”);
}
}
修改maventwo的pom文件
com.offcn mavenone 0.0.1-SNAPSHOT修改maventhree的pom文件
com.offcn maventwo 0.0.1-SNAPSHOT 所有Two类中可以使one类了,Three类可以使用Two类与One public class Two { @Test public void testTwo() { //使用mavenone中的类 One one=new One(); one.testOne(); System.out.println("hello two"); } } public class Three { @Test public void testThree() { Two two=new Two(); two.testTwo(); System.out.println("hello three"); } }依赖的排除
需要当前包,但是不需要当前包的依赖包,(依赖包不稳定,有可能影响我们的产品)需要使用标签将我们不需要的内容排除在外
com.ujiuye
MavenThird
0.0.1-SNAPSHOT
组名
项目名
依赖的原则:
1:依赖的原则,路径最短者优先(就近原则)。
2: 路径相同,先声明者优先。
同一版本配置:
场景: 如果我们切换不同插件的版本的时候,修改的内容较多,这个时候我们需要声明一个统一的版本号,在标签中应用声明版本的标签名称,最后可一个达到灵活切换版本,properties标签还可以做公共的声明
版本声明:
<com.ujiuye.spring.version>5.1.3.RELEASE</com.ujiuye.spring.version>
<com.ujiuye.mybatis.version>3.4.6</com.ujiuye.mybatis.version>
<my.version>tomcat</my.version>
使用声明的版本
org.springframework
spring-context
${com.ujiuye.spring.version}
聚合工程
把分层作为各模块,dao,service,controller
1、创建一个父工程作为聚合工程
2、在聚合下新建模块,选中聚合工程(xm)>右键>new>maven module>xmdao
点击next
3、在聚合下新建模块,选中聚合工程(xm)>右键>new>maven module>xmservice,步骤与上面一样,打包方式jar
4、在聚合下新建模块,选中聚合工程(xm)>右键>new>maven module>xmcontroller>war
5、xmcontroller报错,需在webapp下新建WEB-INF,并添加servlet的依赖,
6、在聚合工程下pom中添加tomcat插件
7、选择项目>右键>run as>maven install
8、选择项目>右键>run as>maven build
9、访问http://localhost:8080/xmcontroller/
使用maven搭建ssm项目
通过骨架创建maven工程,添加ssm的依赖
Pom.xml如下
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.3.6.RELEASE</spring.version>
<jackson.version>2.5.0</jackson.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!-- mybatis 包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
<!--mybatis spring 插件 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- mysql连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- 数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.12</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.4</version>
</dependency>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- json -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- 文件上传 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
1、创建数据库
DROP TABLE IF EXISTS student
;
CREATE TABLE student
(
sid
int(11) NOT NULL AUTO_INCREMENT,
sname
varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (sid
) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
– Records of student
INSERT INTO student
VALUES (1, ‘梦琪’);
INSERT INTO student
VALUES (2, ‘初夏’);
INSERT INTO student
VALUES (3, ‘忆柳’);
创建实体类
public class Student {
private int sid;
private String sname;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
}
创建mapper
public interface StudentMapper {
List list();
}
<!-- 映射
column:数据库字段
property:实体类中的属性
-->
<resultMap type="Student" id="StudentResultMap">
<!-- 主键用id -->
<id column="sid" property="sid" />
<!-- 普通字段用 result-->
<result column="sname" property="sname"/>
</resultMap>
<!--
select查询
id:写接口中的方法名
-->
<select id="list" resultMap="StudentResultMap">
SELECT * FROM student
</select>
创建service
public interface StudentService {
List list();
}
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentMapper studentMapper;
@Override
public List<Student> list() {
return studentMapper.list();
}
}
创建controller
@Controller
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping("/stu")
public String index(Model model) {
List<Student> list = studentService.list();
model.addAttribute("list",list);
return "stu";
}
}
创建stu.jsp
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
- ${stu.sid }-${stu.sname }
2、访问http://localhost:8080/mavenssm/stu
附上配置文件
db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=rootlog4j.properties
log4j.rootLogger=DEBUG, stdout
.# Console output…
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%nmybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?><!-- 开启懒加载 --> <settings> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/> </settings> <!-- 扫描实体类 --> <typeAliases> <package name="com.offcn.pojo"/> </typeAliases> <!-- 扫描Mapper层 --> <mappers> <package name="com.offcn.mapper"/> </mappers> <!-- 数据源交给spring管理 -->
spring-config.xml
<?xml version="1.0" encoding="UTF-8"?><!-- 扫描注解 --> <context:component-scan base-package="com.offcn" /> <context:annotation-config /> <!-- 支持切面切点注解 --> <aop:aspectj-autoproxy /> <!-- 加载数据库配置文件 --> <context:property-placeholder location="classpath:db.properties"/> <!-- 配置数据源 --> <!-- 配置数据源,使用 alibaba 连接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxActive" value="10" /> <property name="maxIdle" value="5" /> </bean> <!-- 配置 sqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- mybatis 的配置文件路径 --> <property name="configLocation" value="classpath:mybatis-config.xml" /> <!-- SqlSessionFactory需要数据源信息,之前是写在sqlmapconfig.xml,现在需要重新指定 --> <property name="dataSource" ref="dataSource" /> </bean> <!-- 扫描Mapper层 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 指定批量 mapper 配置的包名 --> <property name="basePackage" value="com.offcn.mapper" /> <!-- 指定使用的 SqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> <!-- 配置事务管理 开始--> <!-- 事务管理器 --> <bean id="trManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 支持事务注解,不使用注解可以不加 --> <tx:annotation-driven transaction-manager="trManager"/> <!-- 传播方式 --> <tx:advice id="trManagerAdvice" transaction-manager="trManager"> <tx:attributes> <tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/> <tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/> <tx:method name="remove*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/> <tx:method name="*" isolation="DEFAULT" propagation="REQUIRED" read-only="true"/> </tx:attributes> </tx:advice> <!-- 事务切面切点 --> <aop:config> <aop:pointcut expression="execution(* com.offcn.service.*.*(..))" id="servicePointcut"/> <aop:advisor advice-ref="trManagerAdvice" pointcut-ref="servicePointcut"/> </aop:config> <!-- 配置事务管理 结束 -->
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?><!-- 自动扫包,实现支持注解的 IOC --> <context:component-scan base-package="com.offcn.controller" /> <mvc:annotation-driven conversion-service="dateConveter" /> <!-- Spring MVC 不处理静态资源 --> <mvc:default-servlet-handler /> <!-- 支持 mvc 注解驱动 --> <mvc:annotation-driven enable-matrix-variables="true"/> <!--自定义消息转换器的编码,解决后台传输json回前台时,中文乱码问题--> <mvc:annotation-driven > <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter" > <property name = "supportedMediaTypes"> <list> <value>application/json;charset=utf-8</value> <value>text/html;charset=utf-8</value> <!-- application 可以在任意 form 表单里面 enctype 属性默认找到 --> <value>application/x-www-form-urlencoded</value> </list> </property> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" > </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 日期转换 全局控制器 --> <bean id="dateConveter" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <list> <!-- 这里写自定义的转换工具类 --> <bean class="com.offcn.utils.DateConveter" /> </list> </property> </bean> <!-- 处理文件上传的工具类 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 通过属性来规范上传文件的信息 --> <property name="defaultEncoding" value="UTF-8"></property> <!-- 上传文件的最大字节数 --> <property name="maxUploadSize" value="5000000"></property> </bean> <!-- 配置渲染器 --> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <!-- 物理视图=前缀+视图名称+后缀 /WEB-INF/jsp/show.jsp --> <!-- 结果视图的前缀 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 结果视图的后缀 --> <property name="suffix" value=".jsp"/> </bean>
Dsdsfd
sdfsdfsd