maven-项目构建工具总结

maven

1.概念

maven是一个项目管理和构建的工具

2.作用

(1)很方便对项目进行统一的管理(maven的命令)
(2)很方便的对项目所依赖的jar包进行下载管理

3.安装和使用

前提:jdk的环境(maven是java开发的,所以需要有jre的环境)
maven下载、解压、配置环境变量、测试
maven配置 conf/settings.xml
修改settings.xml的3个位置 :
本地仓库的位置(c盘----其他盘符) 程序员windows家庭版(影音娱乐使用)----》windows10 专业版
中央仓库的位置(默认—》阿里云的)
jdk的使用版本 (默认1.5–》1.8)

4.maven项目的目录结构

体现了约定大于配置,尽量使用约定好或者固定好的目录结构,避免灵活性,maven也可以配置,强烈建议大家使用maven约定的目录结构

项目目录结构
—src – main — java 放java的主程序 servlet/service/dao/entity
— resource 放配置文件 xml文件 prop属性文件等
— webapp 放web资源文件 比如 jsp、html、js、css,WEB-INF,web.xml
– test —java 放项目的测试代码
—resource 放项目测试用的配置文件、属性文件
—target WEB-INF/classes 放编译后的Java字节码class文件、配置文件
WEB-INF/lib 依赖的jar包
/ jsp或者js、css等目录下
打包的jar、war文件
—pom.xml项目管理的主文件

5.使用eclipse创建maven项目

前提:需要在eclipse中配置maven
(1)使用骨架创建
(2)不使用骨架创建

6.仓库repository

本地仓库 程序员的个人电脑上D:/.m2/repository
远程仓库
私服 局域网服务器仓库(公司的服务器nexus)
中央仓库 放各种版本各种可能会用到的jar文件
maven中央仓库
apache中央仓库
阿里云的中央仓库

7.maven的生命周期

(1)clean生命周期
mvn clean 清除target目录
(2)默认的生命周期
mvn compile 编译 src/main/java下的java代码----》class文件
mvn test-compile 编译src/test/java下的java代码—》class文件
mvn test 运行src/test/java下的java测试程序
mvn package —根据pom.xml中war
–war 把当前的项目(编译后的class文件、配置文件、jsp、html、css等)打包成war文件放入target中
–jar 把当前的项目(编译后的class文件、配置文件等)打包成jar文件放入target中
mvn install —(一般不用在web程序) 把生成的jar安装到本地仓库

(3)site的生命周期
mvn site 生产一些文档和统计报表

8.依赖

(1)依赖的三要素,坐标(查找jar文件)

​ G: groupId 组织、公司名域名倒叙 +项目 org.lanqiao com.mysql org.apache.tomcat
​ A: artifactId 模块名/项目名字 ssm spring-aop spring-beans
​ V:version:版本号 0.0.1-SNAPSHOT快照版

          0.0.1-SNAPSHOT快照版  还在开发进行中
          0.0.1-alpha  α测试版 (内部人员模拟真实用户测试通过后)
          0.0.1-beta   β测试版   (对外进行测试的版本,真实用户可以下载使用,并反馈意见 用户体验的反馈,bug反馈)
          0.0.2-beta   修改以后再发布
          0.0.3- release  正式版(bug很少)

          0.0.1---》0.0.2  只是修改了几个小bug后的版本升级
          0.0.1---》0.1.0  添加了一个或几个新的模块(功能)
          0.0.1---》1.0.1 可能或设计到整体软件的重新架构,革命性的改变

         jdk发展  jdk1.0 1.1 1.2 1.3 1.5  ---》jdk5.0  ---》jdk6.0  ---》jdk14
         通过依赖的GAV查找jar ---在本地仓库(远程仓库)查找
(2)统一的版本管理
<properties>
  	<spring-version>5.3.0</spring-version>
  	<junit-version>4.2</junit-version>
</properties>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit-version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring-version}</version>
    </dependency>
    
 </dependencies>
(3)依赖的范围

test
compile默认
test
runtime
provided
编译时 测试时 运行时

compile V V V
test X V X
runtime X V V
provided V V X

(4)依赖的传递

pom.xml中导入一个依赖A.jar —B.jar —c.jar —d.jar
maven会自动的把A.jar依赖的B.jar导入进来

(5)依赖冲突的问题

​ A.jar — B.jar ---- C.jar
​ H.jar ---- C.jar
​ maven如何解决?2种原则
​ a.最短路径原则
​ A.jar — B.jar ---- C.jar 路径长,所以不会导入
​ |
​ H.jar ---- C.jar 路径最短,所以会导入该C.jar
​ b.顺序原则
​ A.jar ---- C.jar //A先定义,就加载该C.jar
​ B.jar ---- C.jar
​ 2个路径长度一样,按照依赖在pom.xml中的定义顺序来加载,谁先定义就加载谁的

手动去除依赖
<dependency>
    <groupId>a</groupId>
    <artifactId>a</artifactId>
    <version>1.0</version>
    //排除c依赖,原a.jar需要c.jar,通过这个设置,不会自动导入c.jar
    <exclusions>
        <exclusion>
            <groupId>c</groupId>
            <artifactId>c</artifactId>
        </exclusion>
    </exclusions>
</dependency>

日志框架
很多框架都会有日志框架,可能会照成冲突,可能会把自己一些依赖的日志框架排除

9.补充pom.xml

核心

pom.xml

<project>
    <!--1.该项目的坐标-->
    <groupId>org.lanqiao</groupId>
    <artifactId>maven_test2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <!--2.属性变量定义-->
    <properties>
        <spring-version>5.3.0</spring-version>
        <junit-version>4.2</junit-version>
    </properties>
    <!--3.项目中所要用到的依赖-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit-version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <!--4.maven可能会用到的插件-->
    <build> 
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <!--控制tomcat端口号 -->
                <configuration>
                    <port>80</port>
                    <!-- 发布到tomcat后的名称 -->
                    <!--/ 相当于把项目发布成ROOT -->
                    <path>/</path>
                    <uriEncoding>UTF-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

10.聚合和继承

(一般适应于中大型项目或者互联网类的项目)

(1)聚合: 一个父工程把所有的子工程聚合成一个项目
在父工程中的pom.xml中定义了下边的内容,chd01,chd02,chd03都是父工程的子工程

<modules>
    <module>maven_chd01</module>
    <module>maven_chd02</module>
    <module>maven_chd03</module>
</modules>

(2)继承:一个子工程可以继承父工程
子工程的pom.xml中定义:

<parent>
    <groupId>org.lanqiao</groupId>
    <artifactId>maven_parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

(3)聚合工程可以统一使用maven命令进行管理

在父工程的pom.xml上运行maven命令package,maven会自动的把该父工程下的所有子工程全部执行该命令

(4)依赖的统一管理(版本统一管理)
在父工程的pom.xml中

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet-version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit-version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在子工程中需要使用junit的jar包
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
</dependencies>

11.自定义依赖的使用

​ chd02子工程要调用chd01子工程中类,是不能直接调用,如何解决?
​ 把chd01通过maven的命令打包package和安装install把chd01打包放入本地仓库
​ chd02要使用的时候,可以在pom.xml使用依赖导入chd01的jar包,这样chd02可以直接使用chd01中所有的类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值