• 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:javamavenRepository</localRepository>
    		把D:javamavenRepository作为本地仓库的路径,可以通过核心配置文件来改
    	lib
    		依赖jar包
    maven环境变量配置
    	配置的目的
    		想要在任何地方都能够运行mvn命令
    	配置两个一个Home 一个home/bin
    		变量名:MAVEN_HOME
    		变量值:D:javaapache-maven-3.5.4
    		变量名:Path
    		变量值:D:javaapache-maven-3.5.4in
    打开命令行输入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:UsersLE.m2
    epository
    					
    修改本地仓库
    	首先,把maven安装目录config中setting.xml复制一份到.m2文件夹(C:UsersLE.m2路径)下
    				
    	其次,打开setting.xml修改本地仓库地址
    	<localRepository>D:javamavenRepository</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>
    
  • 相关阅读:
    js 格式化相关的时间
    JCE无限制权限策略文件
    Java设计模式之《观察者模式》及应用场景
    Idea for Mac 过期 IntelliJ IDEA 2017 完美注册方法(附idea for Mac破解方法)
    Macbook系统环境安装wget的2个方法
    Mac上brew&thrift安装 以及在thrift架构下,自己新作了maven的小例 Demo
    idea编译器光标变为insert状态
    配置自己的Maven方式并使用Maven 运行项目Idea的maven的项目
    SourceTree 如何下载git 管理的代码-如何创建分支,删除分支,提交代码,回退代码
    ultraEdit MAC 破解方法
  • 原文地址:https://www.cnblogs.com/mumuyinxin/p/11282842.html
Copyright © 2020-2023  润新知