Maven(二)

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();
}

<?xml version="1.0" encoding="UTF-8"?>
<!-- 映射
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” %>

Insert title here
  • ${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=root

    log4j.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%n

    mybatis-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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值