> 文档中心 > JavaEE——从零开始上手Maven项目

JavaEE——从零开始上手Maven项目

目录

    • 一、为什么使用Maven
    • 二、Maven仓库
    • 三、Maven的安装配置
      • 更改本地仓库路径、中央仓库
      • 四、常用的Maven命令
    • 五、依赖的作用域
    • 六、写一个maven+ssm 核心文件配置

一、为什么使用Maven

你是否遇到过下面的这些情况:

  1. 使用一个框架(如spring),需要依赖的jar包太多太杂,每次要找到整理好保存在磁盘中的jar包文件夹,把所有jar导进项目
  2. 在IDE中因为缺失jar包或版本问题,各种小红叹号
  3. 导入别人的项目,又是各种小红叹号
  4. 好不容易百度解决了叹号,运行时tomcat又出现问题
  5. 正常运行后,回头想看一下代码,猛一看"乱七八糟",它的配置文件扔到哪里了…

而Maven的出现,主要就是为了解决这些问题。所说的Maven项目,就是用Maven这一工具,来管理我们的项目。而Maven的作用由重要程度可以总结为以下三个方面:

  • 依赖(jar包)管理
    Maven有一个仓库的概念,下面会有介绍。在一个Maven工程中,我们不用手动的管理jar包,只需要写一下配置文件(pom.xml),Maven就会通过这个仓库,给我们整理依赖、下载jar包、导入jar包。

  • 清晰的目录结构
    Maven不仅给我们管理jar包,而对于一个Maven工程,它有一套约定俗成的目录结构,就好比我们所有的开发程序员,都商量好各种文件要怎么放置、放在什么位置。这样来看,方便了我们阅读别人的程序,而且也避免了在不同IDE下导致的各种各样的路径问题。Maven的目录结构如下:
    在这里插入图片描述

  • 跨平台
    不管是windows还是linux,只要安装的maven,拿到一个maven项目,都可以成功搭建或是部署(maven集成了tomcat,甚至没有安装tomcat也可以运行项目)

二、Maven仓库

上面提到Maven对jar包的管理是通过仓库来实现的,很容易理解,Maven有一个jar包的仓库,项目中需要什么jar包或者需要哪个版本的jar包,就和Maven说,Maven从仓库中找到这些jar包并导入到项目中。Maven涉及到的仓库分为三种,本地仓库、远程仓库、中央仓库。

  • 本地仓库
    本地仓库即在你本地电脑中,maven维护的一个仓库(文件夹)。这个仓库一开始肯定什么都没有,当你在项目配置文件中(pom.xml)配置你所需要的jar包时,maven会根据需求,从远程仓库或中央仓库下载相应的jar包到本地仓库,再从本地仓库导入到项目中。自然,当下载过一次后,下一次你需要这个同样的jar包,maven就可以直接从本地仓库导入。
  • 远程仓库
    maven默认没有配置远程仓库,远程仓库是为了加快jar包下载的速度,一般在学校、公司内部维护的一个私有仓库。下文没有提及配置远程仓库的方法。
  • 中央仓库
    中央仓库网址为http://mvnrepository.com/, 即maven官方或其他第三方(如阿里)维护的一个十分全的大仓库,基本覆盖了我们日常所需的所有jar包。因从maven官方下载速度慢,下文在maven安装中会将中央仓库改为阿里的仓库(建议改),阿里仓库网址:https://maven.aliyun.com。

三、Maven的安装配置

更改本地仓库路径、中央仓库

在Maven解压目录下的conf文件夹中的settings.xml为maven的基本配置文件。打开settings.xml,在标签下添加配置本地仓库的存放目录,即所有jar包都存放在这个目录下,若不配置,默认为用户目录下的.m2/repository

本地仓库存放目录

在标签下添加以下内容,更改Maven的中央仓库为阿里仓库

alimavenaliyun mavenhttp://maven.aliyun.com/nexus/content/groups/public/    central

四、常用的Maven命令

当我们拿到一个maven项目,在项目目录下即可通过maven命令来实现编译、运行等操作,常用的maven命令如下:

  • mvn clean清理编译后的文件(target文件)
  • mvn compile 编译main下的代码
  • mvn test-compile 编译test下的代码
  • mvn test 运行test的代码
  • package 打包
    java项目–>jar包
    web项目–>war包
    由项目中pom.xml 配置war
  • install 发布项目到本地仓库,用在打jar包上,打成jar包可以被其他项目使用
  • tomcat:run 使用tomcat运行

注意,以上的命令按顺序依次为compile、test-compile、test、package、install、tomcat:run,执行后面的会一并把前面的执行

五、依赖的作用域

前面也提到,在pom.xml可以配置项目需要的jar包,(具体怎么配置,在下面的demo中有涉及),但对于一些jar包,根据在不同的场景下,是可以有不同的打包策略的。

比如servlet相关的一些jar包,我们在开发测试环境下,编译阶段是需要的,而在运行阶段,用到的是tomcat中的相关的包,无需项目自带,因此是不用打包的。

再比如单元测试相关的包,如junit的包,仅是测试时使用,项目的编译、运行都用不到这些包。

而maven为我们提供了四中打包策略(即jar包的作用域),总结如下

1、maven-assembly-plugin 打包所有依赖 maven-assembly-plugin         jar-with-dependencies                         make-assembly     package      single          2、 maven-jar-plugin 打包 不包含依赖 同时 exclude可以排除一些文件  maven-jar-plugin           make-a-jar   compile   jar                      *.properties   *.txt        3、org.apache.maven.plugins 跳过测试环节org.apache.maven.pluginsmaven-surefire-plugin  true4、maven-war-plugin 打成war包 同时排除一些文件  maven-war-plugin        WEB-INF/lib/*.jar,WEB-INF/classes/  

六、写一个maven+ssm 核心文件配置

  1. 创建Maven项目
  2. pom.xml(Maven的核心)
    pom.xml中就是我们项目需要的依赖或是插件的配置,需要的jar包都写在这里面,下面整理了ssm框架最基本的一些jar包,复制进pom.xml即可
<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>cn.ssm</groupId><artifactId>SSM</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><properties><spring.version>4.1.7.RELEASE</spring.version><mybatis.version>3.5.3</mybatis.version><mybatis-spring.version>1.3.2</mybatis-spring.version><mysql-connector.version>5.1.40</mysql-connector.version><junit.version>4.9</junit.version><c3p0.version>0.9.5</c3p0.version><servlet-api.version>3.1.0</servlet-api.version><slf4j.version>1.7.5</slf4j.version><lombok.version>1.18.10</lombok.version><jackson-databind.version>2.5.4</jackson-databind.version><maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version><tomcat7-maven-plugin.version>2.2</tomcat7-maven-plugin.version><jdk.version>1.8</jdk.version><encoding>utf-8</encoding></properties><dependencies><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-jdbc</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.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis-spring.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector.version}</version></dependency><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>${c3p0.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${servlet-api.version}</version><scope>provided</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson-databind.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven-compiler-plugin.version}</version><configuration><source>${jdk.version}</source><target>${jdk.version}</target><encoding>${encoding}</encoding></configuration></plugin><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>${tomcat7-maven-plugin.version}</version><configuration><port>8081</port><path>/</path><uriEncoding>${encoding}</uriEncoding><finalName>SSM</finalName></configuration><!--  热部署配置 http://localhost:8080/manager/text sirm 123  --></plugin></plugins><finalName>SSM</finalName></build></project>

VR资源云