首页 > 其他分享 >Maven[2]

Maven[2]

时间:2024-09-29 10:54:23浏览次数:9  
标签:maven 项目 -- jar Maven pom 子项目

1.<scope></scope> 指定依赖坐标范围

范围:

   编译(main/java)

   测试(test/java)

   运行/打包

作用域值

编译

测试

打包

示例

test

×

×

Junit  测试时使用

provided

×

Servlet、lombok
compile

默认

runtime

×

反射,数据库驱动,执行时使用

System

=provided,不会依赖仓库中的jar包,而是引用本地jar包

<systemPath></systemPath>

  1. 依赖范围建议,哪怕所有的范围都设置compile,也不会影响正常使用。
  2. 使用依赖的,提供scope,直接从中央仓库复制就行了,并且自动补全。
  3. 90%以上都会使用compile。

1.项目构建

   项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。

  

主动触发场景:

  重新编译 : 编译不充分, 部分文件没有被编译!

   打包 : 独立部署到外部服务器软件,打包部署

   部署本地或者私服仓库 : maven工程加入到本地或者私服仓库,供其他工程使用

 

  1. 执行Maven的构建命令

  语法: mvn 构建命令 构建命令 ..

  

   清理命令:  mvn  clean  删除taget文件夹

   编译命令:  mvn  compile  将java源文件编译成class文件

   测试命令:  mvn  test     测试项目,执行test目录的测试用例

             注意测试用例的类名必须以Test开头,只执行以Test开头的测试类

   打包命令:  mvn  package  将项目打成jar/war包

   安装命令:  mvn  install    将当前项目放入到maven的本地仓库,供其它项目使用。

   要求:执行maven中运行构建相关的命令时,必须进入到项目的pom.xml所在的目录。否则会报错。

   也可以直接通过maven--->项目--->Lifecycle生命周期点开--->提供了一套操作。

   Validate: 验证工程正确性

   Verify :核实。主要是对package检查是否有效

   Site: 生成项目的站点文档

   Deploy:配置部署,复制到远程仓库

  可视化方式构建 : 通过maven--->项目--->Lifecycle生命周期点开--->提供了一套操作

  

4. Package 项目类型,最终被打成什么项目类型

    默认:jar

    jar 指的是普通的java项目打包方式! 项目打成jar包!

    war 指的是web项目打包方式!项目打成war包!

pom不会将项目打包!这个项目作为父工程,被其他工程聚合或者继承!

如果一个项目有子项目就必须是pom类型

<packaging>jar/pom/war</packaging>

  注意:jdk17 和 war包版本插件不匹配,打成war包,需要引入打包插件

<build>

    <plugins>

        <plugin>

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-war-plugin</artifactId>

            <version>3.2.3</version>

        </plugin>

    </plugins>

</build>

5. 依赖关系

    如果一个项目需要依赖于另外一个项目或jar包

通过pom.xml 中<dependency>标签引入依赖项目或jar包的坐标

<dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <version>8.0.25</version>

</dependency>

 

<dependency>

    <groupId>com.bdqn</groupId>

    <artifactId>taobao-goods</artifactId>

    <version>0.0.1-SNAPSHOT</version>

</dependency>

  依赖传递

     自动下载另一个项目所依赖的所有项目jar包。

  依赖排除 :阻止某一些jar包的传递,因为这样的jar包传递进来会和其他的jar包冲突

   <dependency>
    <groupId>com.bdqn</groupId>
    <artifactId>tb-goods</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--手动排除-->
    <exclusions>
        <exclusion>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </exclusion>
    </exclusions>
</dependency>

依赖冲突:短路经优先,只会引入路径最短的jar包

            相同长度路径下,声明优先,谁先声明。

<!--jackson-->

  <dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-databind</artifactId>

    <version>2.15.0</version>

</dependency>

<dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-annotations</artifactId>

    <version>2.9.0</version>

</dependency>

1.聚合关系

   一个项目拆成了多个工程

   如:淘宝项目,拆分成用户,商品,订单。分开编码太麻烦。

       商品修改后,需要重新打包发布后,订单引用才会生效。

  使用一个总工程,将各个模块工程汇总起来,作为一个完整对应的项目

  通过总工程将多个模块可以一起执行和管理。

   1. 聚合概念

      Maven 聚合是指将多个项目组织到一个父级项目中,通过触发父工程的构建,统一按顺序触发子工程构建的过程!!

   2. 聚合作用

    1. 统一管理子项目构建:通过聚合,可以将多个子项目组织在一起,方便管理和维护。

     2. 优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。

   3. 实现步骤

    1、创建maven父项目,new-->project-->new Project-->maven项目-->taobao-parent

       1. 把src删掉,因为聚合项目通常只是管理子工程

       2. 把packaging修改下,默认jar,改成pom,代表是一个逻辑父项目

       3. 把子项目管理起来

    2、创建子模块

       父项目--->右键--> new-->子模块 module--> parent选None没有

   3. 打开父项目的pom.xml把子项目管理起来 

   <modules>
      <module>tb-goods</module>
      <module>tb-orders</module>
      <module>tb-user</module>
   </modules>

  总结:

  1.父项目类型必须为pom,父项目会将子项目包含进来。

2.子项目类型不是maven project,而是maven moduel

3. 父项目pom.xml通过<module>标签指定子项目信息

<modules>

    <module>taobao-orders</module>

  </modules>

  1. 父项目可以统一管理所有的子项目

       1.点击父项目的构建命令可以直接对所有的子项目进行编译,打包,安装等。

       2.当orders引入goods的模块时,goods模块发生改变,不需要重新安装就可以自动更新。

2.继承关系

   1. 继承概念

Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。

   2. 继承作用

作用:在父工程中统一管理项目中的依赖信息,进行统一版本管理!

它的背景是:

 1. 对一个比较大型的项目进行了模块拆分。

 2. 一个 project 下面,创建了很多个 module。

 3. 每一个 module 都需要配置自己的依赖信息。

它背后的需求是:                           

 1. 多个模块要使用同一个框架,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一管理。

 2. 使用框架时所需要的 jar 包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。

通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力。

   3.实现步骤

    1、创建maven父项目,new-->project-->maven项目-->taobao-parent

       1. 把src删掉,因为聚合项目通常只是管理子工程

       2. 把packaging修改下,默认jar,改成pom,当前不是一个具体的包

       3. 把子项目管理起来

    2、创建子模块

       父项目--->右键--> new-->子模块 module--> parent选taobao-parent

   总结:
  1. 父项目类型必须为pom
  2. 子项目类型可以为jar或war.

如果当前子项目是其它项目的父项目,那么也必须为pom.

  1. 继承关系只是逻辑意义上的继承,父项目没有包含子项目信息
  2. 子项目的pom.xml中通过<parent>标签指定父项目信息

<parent>

    <groupId>com.bdqn</groupId>

    <artifactId>taobao-parent</artifactId>

    <version>0.0.1-SNAPSHOT</version>

  </parent>

  1. 如果子项目的<groupId>和<version>和父项目相同,可以省略。
  2. 父项目中<dependencies>配置的jar包坐标依赖将会被所有子项目自动继承。
  3. 父项目中<dependencyManagement>配置的jar包坐标依赖不会被子项目继承,但是可以统一版本控制。

  1. <dependencyManagement> 标签

   父工程依赖统一管理:如果子项目不继承,需要统一版本,使用dependencyManagement

   1.父项目的pom.xml声明版本

<properties>

 <lombok-version>1.18.26</lombok-version>

 <mysql-version>8.0.25</mysql-version>
</properties>

<dependencyManagement>

    <dependencies>

        <!--小辣椒-->

        <dependency>

            <groupId>org.projectlombok</groupId>

            <artifactId>lombok</artifactId>

            <version>${lombok-version}</version>

            <scope>provided</scope>

        </dependency>

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>${mysql-version}</version>

        </dependency>
</dependencyManagement>

2.子项目的pom.xml引用父项目版本

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

  1. Maven 核心知识点总结

标签:maven,项目,--,jar,Maven,pom,子项目
From: https://blog.csdn.net/2301_80220193/article/details/142613875

相关文章

  • Maven安装、配置、Maven集成到IDEA中
    1.maven安装 1.先maven官网下载maven.网址:Maven–MavenReleasesHistory2.解压到D:\盘根目录下 注意:不能放到中文目录3.配置maven的环境变量 前提条件:maven需要本机安装java环境、必需包含java_home环境变量!       3.1创建MAVEN_HOME的系统环境变量变......
  • Vue和Vite是什么关系呢?-----与java后端的Spring和Maven对照理解一下
    前端框架(FrontendFramework)前端框架是一组预定义的库、工具和约定,用于简化和加速Web应用程序的开发。它提供了一种结构化的方式来构建用户界面,并处理常见的任务,如状态管理、路由、组件化等。类比:后端框架Django(Python)或RubyonRails(Ruby)这些后端框架提供了......
  • 新手指南-新人入职-maven相关
    一、前言入职后,发现公司是用Maven对项目进行管理和构建。一般来说,自己先确定以下几点:1、公司对版本是否有要求。2、是否要求IDEA对maven有特殊的配置。3、确定自己的MAVEN_HOME系统环境是否配置。4、确定maven中的setting.xml配置文件是否改成了公司要求。Maven是apache......
  • 【Day05-maven基础】
    maven基础        Maven是apache提供的一个项目管理工具,它的作用就是管理项目介绍依赖管理依赖管理主要指的是项目怎样引入依赖包,maven会将所有需要的依赖包放在本地仓库中,然后每个项目通过配置文件引入自己所需要的那部分jar包在maven本地仓库中是按照什么结......
  • maven parent: 指定了项目的父 POM packaging: 指定打包类型为 POM。 modules: 列出了
    1.parent定义:这是指一个项目的父POM(ProjectObjectModel)。在Maven中,父POM可以包含共享的配置、依赖和插件设置,使多个子项目可以继承这些设置。作用:通过指定父POM,子项目可以自动获取父项目中定义的依赖版本、插件配置等,减少重复配置,提高一致性。例如,所有子模块......
  • maven 使用SNAPSHOT版本确实可以帮助开发团队更高效地迭代和测试新功能
    使用SNAPSHOT版本确实可以帮助开发团队更高效地迭代和测试新功能。下面是一个更详细的解释:快速迭代频繁构建和部署:由于SNAPSHOT版本通常与持续集成(CI)工具结合使用,因此每次提交代码后都可以触发构建和部署流程。这意味着每次有新的代码更改时,都会有一个新的SNAPSHOT版本产......
  • maven annotationProcessorPaths
    <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven-compiler-plugin.version}</version><configuration><annotat......
  • Flink(二)搭建Maven工程实现WordCount
    开发环境编写WordCountpom文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=&qu......
  • 排查maven 冲突及解决方式
    MavenMaven是一个以项目为中心的自动化构建工具,主要用于Java项目的管理和构建。它提供了一种统一的方式来描述项目的结构、依赖关系和构建过程,简化了项目的构建和管理。Maven的主要特点:项目对象模型(POM):Maven使用pom.xml文件来定义项目的依赖、插件和构建配置。POM是Maven......
  • Maven中的配置文件
    在使用Maven进行项目管理时,合理配置settings.xml文件可以显著提高开发效率。1.找到maven对应的settings.xml文件我是使用IDEA自带的maven。就算是自己下载的maven,操作也是一样的,先找到setting文件。2.配置镜像资源为了加快依赖下载速度,可以配置国内的镜像资源。以下......