SSM项目实战 之 Maven

Maven

简介

Maven是什么

  • Maven是基于项目对象模型(POM,project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具
  • 通过pom.xml文件的配置获取jar包,而不用手动去添加jar包
  • 合理叙述项目间的依赖关系

Maven下载安装

http://maven.apache.org/download.cgi
安装
	直接解压就可以
目录结构
	bin
		包含了Maven的运行脚本文件
	boot
		Maven的依赖的类加载器
	conf
		Maven的全局配置文件(settings.xml),定制Maven的运行行为
		<localRepository>D:\java\mavenRepository</localRepository>
		把D:\java\mavenRepository作为本地仓库的路径,可以通过核心配置文件来改
	lib
		依赖jar包
maven环境变量配置
	配置的目的
		想要在任何地方都能够运行mvn命令
	配置两个一个Home 一个home/bin
		变量名:MAVEN_HOME
		变量值:D:\java\apache-maven-3.5.4
		变量名:Path
		变量值:D:\java\apache-maven-3.5.4\bin
打开命令行输入mvn -v 查看结果

Maven使用

Maven规定了一套默认的项目格式

src/main/java
	存放项目的.java文件
src/main/resources
	存放项目资源文件,如spring、struts2配置文件,db.properties
src/main/webapp
	 存放jsp,css,image等文件
src/test/java
	存放所有测试.java文件,如JUnit测试类
src/test/resources
	 测试资源文件
pom.xml
	主要要写的maven配置文件
target
	项目由maven自动输出位置

创建第一个Maven项目

  • 确保idea安装了Maven插件
  • 创建Maven工程


  • 添加Maven依赖jar包(会自动把jar依赖到项目当中)

    pom.xml

    <?xml version="1.0" encoding="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/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.itlike</groupId>
      <artifactId>SSMMavenPro</artifactId>
      <version>1.0</version>
      <packaging>war</packaging>
    
      <name>SSMMavenPro Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    
        <!--定义版本号   ${org.springframework.version}-->
        <org.springframework.version>5.0.7.RELEASE</org.springframework.version>
        <org.mybatis.version>3.4.6</org.mybatis.version>
    
      </properties>
    
      <dependencies>
    
        <!--单元测试-->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>
        <!--lombok-->
        <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>1.16.6</version>
        </dependency>
        <!-- servlet-api -->
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <scope>provided</scope>
        </dependency>
        <!--mysql驱动-->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.21</version>
        </dependency>
        <!-- druid -->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.0.14</version>
        </dependency>
        <!-- common-lang -->
        <dependency>
          <groupId>commons-lang</groupId>
          <artifactId>commons-lang</artifactId>
          <version>2.6</version>
        </dependency>
        <!--spring-test-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${org.springframework.version}</version>
          <scope>test</scope>
        </dependency>
        <!--spring-core-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <!--spring-context-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <!--spring-context-support-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <!--spring-expression-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-expression</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <!--spring-jdbc-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <!--spring-tx-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <!--spring-web-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <!--spring-aop-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
        <!--spring-webmvc-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${org.springframework.version}</version>
        </dependency>
    
        <!-- aspectj -->
        <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjrt</artifactId>
          <version>1.7.4</version>
        </dependency>
        <!--aspectj weaver-->
        <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
          <version>1.7.4</version>
        </dependency>
    
        <!-- cglib -->
        <dependency>
          <groupId>cglib</groupId>
          <artifactId>cglib</artifactId>
          <version>3.1</version>
        </dependency>
    
        <!-- mybatis -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>${org.mybatis.version}</version>
        </dependency>
        <!--mybatis-spring-->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>1.3.0</version>
        </dependency>
    
        <!-- jackson-core -->
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.9.4</version>
        </dependency>
        <!--jackson-databind-->
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.9.4</version>
        </dependency>
        <!--jackson-annotations-->
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
          <version>2.9.4</version>
        </dependency>
    
        <!--slf4j-api-->
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.7.6</version>
        </dependency>
        <!--slf4j-log4j12-->
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>1.7.6</version>
        </dependency>
        <!--log4j-->
        <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.17</version>
        </dependency>
        <!--commons-fileupload-->
        <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.3.1</version>
        </dependency>
        <!-- jstl -->
        <dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
        <!-- standard -->
        <dependency>
          <groupId>taglibs</groupId>
          <artifactId>standard</artifactId>
          <version>1.1.2</version>
        </dependency>
        <!--pagehelper-->
        <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper</artifactId>
          <version>4.1.4</version>
        </dependency>
      </dependencies>
    
      <build>
        <finalName>SSMMavenPro</finalName>
    
        <plugins>
          <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.2</version>
            <configuration>
              <verbose>true</verbose>
              <overwrite>false</overwrite>
            </configuration>
            <dependencies>
              <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.21</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
    
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <plugins>
            <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.1.0</version>
            </plugin>
            <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
            <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <version>3.0.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.22.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <version>3.2.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <version>2.5.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <version>2.8.2</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>
    

Maven仓库

  • Maven所有的Jar包都是放到maven仓库当中
  • 在项目当中是对仓库jar包的引用

Maven仓库

本地仓库
	本地存放jar的目录
私服
	私人搭建的服务器,一般在企业内部局域网使用
中央仓库
	Maven内置了一个远程仓库的地址,它就是中央仓库

Maven找jar包的过程

  • Maven查找引入jar包时, 会先到本地仓库当中查找,没有找到就会到私服中找,也没有就去到远程中央仓库查找.
  • 找到后会下载到本地仓库,下次就不用到远程仓库查找了
  • 最终都会把jar包下载到本地仓库
  • Maven工程最终引用的都是本地的jar包

设置本地仓库目录地址

默认本地仓库
	C:\Users\LE\.m2\repository
					
修改本地仓库
	首先,把maven安装目录config中setting.xml复制一份到.m2文件夹(C:\Users\LE\.m2路径)下
				
	其次,打开setting.xml修改本地仓库地址
	<localRepository>D:\java\mavenRepository</localRepository>

阿里云镜像

<mirror>
	<id>alimaven</id>
	<mirrorOf>central</mirrorOf>
	<name>aliyun maven</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

Jar包的坐标

  • 组织groupId
  • 项目artifactId
  • 版本version

Maven常用命令

validate
	确保当前配置和 POM 的内容是有效的
clean
	删除target目录下及其目录下的所有内容
mvn compile
	将java文件编译成二进制放到target目录当中
test
	运行测试用例
package
	打包工程
install
	把maven打成的包发布到本地仓库当中
后一个命令执行时, 前面命令都会执行

命令

Maven作用范围(scope值)

pom.xml文件
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-test</artifactId>
	<version>${org.springframework.version}</version>
	<scope>test</scope>
</dependency>

compile
	默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。
	打包的时候通常需要包含进去
test
	依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行。
	不会被打包,例如:junit
runtime
	表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。
	与compile相比,跳过了编译而已。
	例如JDBC驱动,适用运行和测试阶段
provided
	打包的时候可以不用包进去,别的设施会提供。
	事实上该依赖理论上可以参与编译,测试,运行等周期。
	相当于compile,但是打包阶段做了exclude操作
system
	从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径

Maven创建Web工程

注意事项

  • generating project in batch mode 很慢,是因为maven获取archetype-catalog.xml导致。
  • 用浏览器打开http://repo1.maven.org/maven2/archetype-catalog.xml很慢。
  • 解决方法: 在用maven创建项目时在properties中添加 archetypeCatalog=internal,让maven读取本地配置即可。

tomcat插件

<plugins>
	<plugin>
		<groupId>org.apache.tomcat.maven</groupId>
		<artifactId>tomcat7-maven-plugin</artifactId>
		<version>2.2</version>
		<configuration>
		  <port>8081</port>
		  <path>/</path>
		</configuration>
	</plugin>
</plugins>
posted @ 2019-08-01 15:22  海韵༒听心  阅读(360)  评论(0编辑  收藏  举报