Loading

Maven项目管理工具

Maven简介及好处

是apache下的一个开源项目,是纯java开发的,并且只是用来管理java项目的

依赖管理

项目所用到的jar都放在本地仓库,使用时通过坐标定位位置

项目一键构建

一个mvn tomcat:run命令就能把项目运行
Maven能干的事:编译—>测试(junit)—>运行—>打包—>部署

其他好处

  • 可以跨平台
  • 应用于大型项目,可以提高开发效率

Maven的安装和配置

下载和安装

点击官网地址找到对应版本下载,解压即可

Maven环境变量配置

  • Maven3.3X以上的版本所需要的jdk都需要1.7以上的版本
  • 添加系统变量MAVEN_HOME:为了在任何目录下可以使用Maven命令
  • 查看是否添加成功:cmd中 mvn -v 查看Maven版本

settings.xml配置

Maven软件的核心配置文件:settings.xml

  • localRepository标签
    • 放开标签修改默认本地仓库地址
    • 默认路径:${user.home}/.m2/repository
  • Maven仓库
    • 本地仓库:本地仓库的配置只需要修改settings.xml配置文件就可以
    • 远程仓库:公司维护
    • 中央仓库:maven团队维护

Maven的目录结构

  • src
    • main(主目录)
      • java(java代码)
      • resources(配置文件,properties,xml...)
      • webapp
    • test(测试目录)
      • java(java代码 junit测试)
      • resources(junit测试用到的配置文件,如果里面没有配置文件默认从main找)
  • pom.xml

Maven常用命令及生命周期

执行Maven命令的时候必须进入到项目文件夹里面

  • mvn clean:清理编译好的文件
  • mvn compile:编译了主目录的文件
  • mvn test:编译并运行了测试目录的文件
  • mvn package:打包
  • mvn install:把项目发布到本地仓库(一般是java工程打成jar包)
  • mvn deploy:把项目发布私服
  • mvn site:生成一些静态页面,是对项目的一些说明

Maven的生命周期

Clean生命周期:clean
Deafult生命周期:compile—>test—>package—>install—>deploy
Site生命周期:site

命令和生命周期的阶段的关系
不同的生命周期的命令可以同时执行:例如mvn clean package

项目构建

  • 项目路径名
    • Group Id:公司或者组织名称(cn.itcast),可以具体到项目名(cn.itcast.crm)
    • Artifact Id:项目名称(hello),可以具体到模块名称(service)
    • Version:版本,snapshot快照版
    • Package:打包方式 jar、war、pom
  • webapp文件夹下需要创建WEB-INF文件夹,里面放一个web.xml文件
  • 处理编译版本:pom.xml文件中的build—>plugins标签中
<build>
  <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
  </plugins>
</build>
<dependencies>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
</dependencies>

依赖管理

依赖范围

  • Compile:默认(可省略)编译(compile)时要,测试时要,运行时要,打包时要
  • Provided:编译时要,测试时也要,运行时不要,打包时不要
  • Runtime:数据库驱动包,编译时不要,测试时要,运行时要,打包时要
  • Test:编译时不要,测试时要,运行时不要,打包时不要

依赖范围对依赖传递的影响
依赖范围对依赖传递的影响

依赖版本的冲突解决

当我们在pom.xml文件中添加了spring-context以及struts-spring-plugin的依赖后,这时会出现其他的jar包,称之为依赖传递,而添加不同的依赖后,可能会产生版本的冲突

  1. 第一申明者优先原则

在pom.xml文件中定义依赖,以首先定义的依赖为基准,比如当我们同时定义了spring-bean的两个版本,那么首先定义的4.2.4版本将成为依赖的基准

<dependencies>
  <!-- spring-beans-4.2.4 -->
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-context</artifactId>
  		<version>4.2.4.RELEASE</version>
  	</dependency>
   
  <!-- spring-beans-3.0.5 -->
  	<dependency>
  		<groupId>org.apache.struts</groupId>
  		<artifactId>struts2-spring-plugin</artifactId>
  		<version>2.3.24</version>
  	</dependency>
</dependencies>
  1. 路径近者优先原则

也就是说当我们在pom.xml文件中单独添加了spring-bean的依赖,而struts-spring-plugin依赖于spring-bean,struts-spring-plugin与我们单独所定义的spring-bean是同级的,因此会以单独定义的bean依赖为基准。(也就是自己添加的jar包)

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>4.2.4.RELEASE</version>
</dependency>
  1. 排除依赖原则

比如在添加struts-spring-plugin约束时,排除spring-bean,如下所示:

<dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId>struts2-spring-plugin</artifactId>
  <version>2.3.24</version>
  <exclusions>
    <exclusion>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
    </exclusion>
  </exclusions>
</dependency>
  1. 版本锁定原则

面对众多的依赖,版本锁定这一种方式不需要考虑依赖的路径、声明优化等因素,可以直接锁定所依赖jar包的版本,锁定后不会考虑声明顺序及路径。下面以锁定Struts2、Spring、Hibernate版本为例:

<properties>
  <spring.version>4.2.4.RELEASE</spring.version>
  <hibernate.version>5.0.7.Final</hibernate.version>
  <struts.version>2.3.24</struts.version>
</properties>
<!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>${struts.version}</version>
    </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
  </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>${hibernate.version}</version>
    </dependency>
  </dependencies>
</dependencyManagement>

Tomcat插件

Tomcat6运行命令:Tomcat:run

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>tomcat-maven-plugin</artifactId>
      <version>1.1</version>
      <configuration>
          <path>/</path>
          <port>8080</port>
      </configuration>
    </plugin>
  </plugins>
</build>

Tomcat7运行命令:Tomcat7:run

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.2</version>
          <configuration>
            <path>/</path>
            <port>8080</port>
          </configuration>
    </plugin>
  </plugins>
<build>
posted @ 2022-02-09 15:33  hk1998  阅读(31)  评论(0编辑  收藏  举报