当前位置: 首页 > news >正文

Maven相关名词及相关配置

1、相关名词

1 Project: 任何你想build的事物,maven都可以认为他们是工程,这些工程被定义为工程对象模型(POM:Project Object Model)一个工程可以依赖其他的工程,一个工程也可以有多个子工程构成。
2 POM: 就是xml文件,是maven的核心文件,它是Maven如何工作的元数据文件。POM文件位于每个工程的根目录中。
3 GroupId: groupId是一个工程在全局唯一的标识符,一般,他就是包名。GroupId有利于使用一个完整的包名,将一个工程从其他有类似名称的工程里区别出来。
4 Artifact: artifact是工程将要产生或者需要使用的文件,他可以是jar文件、源文件、二进制文件、war文件、甚至是pom文件。每个artifact都有groupId和artifactId组合的标识符唯一识别。需要被使用(依赖)的artifact都要放在仓库(见Repository)中,否则Maven无法找到他们。
5 Dependency: 为了能够bulid或者运行,一个典型的java工程会依赖其他的包。在Maven中,这些被依赖的包就被称为dependency。Dependency一般是其他工程的jar。
6 Plugin: Maven是由插件组成的,它的每一个工程/功能都是由插件提供的。插件提供goal,并根据在POM中找到的元数据去完成工作。主要的Maven插件都是由java写成的,但是也支持用Beanshell或者Ant脚本写的插件。
7 Repository: 仓库。

2、pom.xml文件配置

1. 常用的基础结构
一个基本的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>com.example</groupId><artifactId>my-app</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><dependencies><!-- 依赖项 --></dependencies><build><!-- 构建配置 --></build>
</project>

2. 添加依赖
在部分添加你项目的依赖。例如,添加Spring Boot的依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.5.4</version></dependency>
</dependencies>

3. 配置插件
在部分配置Maven插件,例如配置Maven Compiler插件以指定Java版本:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins>
</build>

4. 配置属性
你可以在部分定义项目属性,以便在pom.xml中重用:

<properties><java.version>1.8</java.version><spring-boot.version>2.5.4</spring-boot.version>
</properties>

然后在依赖中引用这些属性:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring-boot.version}</version>
</dependency>

5. 配置仓库(可选)
如果你需要使用不在Maven中央仓库中的依赖,可以在pom.xml中配置仓库:

<repositories><repository><id>my-repo</id><url>http://myrepository.com/repo</url></repository>
</repositories>

6. 父项目(可选)
如果你的项目继承自另一个项目,可以使用parent元素:

<parent><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0</version>
</parent>

7.全景配置标签解释
在这里插入图片描述
主要标签大致分下面几类:
坐标(Coordinates): groupId、artifactId、version ,这三个组合在一起可以唯一锁定项目在仓库中的位置
聚合(Aggregation): modules (一个项目可以分N个模块)
继承(Inheritance): parent、 dependencyManagement
依赖(Dependences): dependences
项目工程2信息(Project Information): name、description、url…
构建配置(Build Settings): properties、 packaging(打包方式)、 build (构建信息)、reporting(报告)
环境信息(Environment):…

  • project
<project > :文件的根节点。(固定的)
  • modelversion
<modelversion > :pom.xml使用的对象模型版本(一般也都是4.0.0版本)
  • groupId
<groupId > :创建项目的组织或团体的唯一Id。
  • artifactId
<artifactId > :项目的唯一Id, 可视为项目名。
  • version
<version > :产品的版本号。
注意:groupId ,artifactId ,version 这三个称之为项目坐标,因为这三个组合在一起可以唯一锁定项目在仓库中的位置,因此,如果要寻找一个项目,先要获得其项目坐标,格式:仓库/groupId/artifactId/version/项目包(jar、war)
  • packaging
<packaging > :打包类型,一般有jar、war、pom 等 
jar包 ------- 简单java项目
war包 -----  web项目
pom ----- 父项目,提供pom被子项目继承 
  • name
<name > :项目的显示名,常用于 Maven 生成的文档。
问题:关于artifactId、name、工程名是否必须一致?
三者可以不一致!
其作用区别是什么?
通过两个测试:
1、如果使用tomcat:run 运行项目,访问项目通过 artifactId 属性
2、在项目编译打包、安装部署,还是使用artifactId属性
通过测试发现:Name属性只是用来生成文档中显示,不会影响到工程发布和打包等,写什么都无所谓。而工程本身的名字也对工程发布和打包没有影响,也无所谓。
  • description
<description > :项目描述,常用于 Maven 生成的文档
  • dependencies/dependency
    完整的dependency 配置如下:
    在这里插入图片描述
1、groupId、artifactId、version是依赖的基本坐标,“缺一不可”,其它两个坐标元素不指定时将采用默认值(找到jar的位置)(当version没有的情况下,会自动使用依赖默认的版本)
2、type:依赖的类型,对应坐标packaging方式,(它通常表示依赖的文件的扩展名),默认为jar。
3、optional:标记依赖是否可选。A->B->C,那么当A依赖于C时就可以设为可选。一般不配置。
4、exclusions:排除传递依赖,即某些依赖项目不想导入进来。(主要用来解决版本冲突问题)
5、依赖范围: scope 
	compile :编译需要,打包需要 (大多数的jar都是这种)-默认值
	provided :编译需要,不会被打包 (servlet、jsp)
	runtime: 编译不需要,打包运行时需要(jdbc驱动)
	test: 参与测试,不会打包 (junit)常用标签如下,所有的依赖都必须放到<dependencies>标签元素中,即一个项目可以依赖多个其他项目。如下:<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.2.0.RELEASE</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.15</version></dependency></dependencies>

exclusions排除依赖示例:
应用场景:当两个依赖项目都依赖于另外一个项目的不同版本的时候,就可以通过排除依赖,将不要的版本排除掉。
maven依赖有个特性:如果你依赖一个项目的两个版本,maven只会导入一个版本的项目。

在这里插入图片描述

scope 的依赖范围
在这里插入图片描述

  • properties
  <!-- 统一维护版本-定义本地属性 --><properties><spring.version>3.2.0.RELEASE</spring.version><struts2.version>2.3.15.2</struts2.version></properties>
  • plugins
    1.maven-compiler-plugin编译插件
    在这里插入图片描述
    2.maven-surefire-plugin测试插件
    主要功能是输出日志和报告。
    在这里插入图片描述
可解决两个问题:
1.中文乱码问题
解决方法:通过覆盖超级pom的默认配置来增加一个配置属性
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.7.1</version><configuration><argLine>-Dfile.encoding=UTF-8</argLine></configuration> </plugin></plugins></build>
2.跳过测试

在这里插入图片描述
在这里插入图片描述
3 .tomcat-maven-plugin使用 tomcat
使用tomcat:run 命令,默认使用 tomcat-maven-plugin:1.1 运行 ,使用8080端口
如何修改端口?
添加插件:

<plugin><groupId>org.codehaus.mojo</groupId><artifactId>tomcat-maven-plugin</artifactId><version>1.1</version><configuration><!—可选,指定端口--><port>9090</port></configuration></plugin>

在这里插入图片描述
乱码:
在这里插入图片描述覆盖为utf-8
在这里插入图片描述

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>cn.baidu.maven</groupId><artifactId>storemanagermaven</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>storemanagermaven</name><description>仓库管理系统的maven工程</description><build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.6</source><target>1.6</target></configuration></plugin></plugins></build><!-- 版本统一维护 --><properties><spring.version>3.2.0.RELEASE</spring.version><struts2.version>2.3.15.2</struts2.version><hibernate.version>3.6.10.Final</hibernate.version><mysql.version>5.1.6</mysql.version><ehcache.version>2.6.6</ehcache.version><c3p0.version>0.9.1.2</c3p0.version></properties><!-- spring --><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>3.2.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>3.2.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>3.2.0.RELEASE</version></dependency><!-- hibernate --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>3.6.10.Final</version></dependency><!-- struts2 --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.3.15.2</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-json-plugin</artifactId><version>2.3.15.2</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>2.3.15.2</version></dependency><!-- 其他 --><!-- 日志 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.2</version></dependency><!-- 缓存 :必须2系列的版本--><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache-core</artifactId><version>2.6.6</version></dependency><!-- c3p0 --><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency><!-- jdbc driver --><dependency><groupId>com.oracle</groupId><artifactId>ojdbc14</artifactId><version>10.2.0.4.0</version><scope>runtime</scope></dependency><!-- servlet --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- 测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency></dependencies>
</project>

相关文章:

  • Ubuntu卸载小皮面板
  • 记一次springboot集成海康威视SDK过程
  • 九、自动化函数02
  • sprintf函数
  • 企业应如何防范 AI 驱动的网络安全威胁?
  • WAF防火墙:构筑Web应用安全的“隐形护盾”
  • emotn ui桌面tv版官网-emotn ui桌面使用教程
  • 通信算法之265: 无人机系统中的C2链路
  • 前端 -- uni-app 的 splitChunks 分包详解与实战!
  • 图像预处理-色彩空间补充,灰度化与二值化
  • 如何在不同版本的 Elasticsearch 之间以及集群之间迁移数据
  • Android ExifInterface rotationDegrees图旋转角度,Kotlin
  • 基于 PyTorch 的 LSTM 实现降雨量预测
  • 使用RUN pip install flask和RUN pip install -r requirements.txt
  • 【rdma通信名词概念】
  • 鸿蒙开发中,@Extend、@Styles 和 @Builder 的区别
  • 前端快速入门——JavaScript函数、DOM
  • Spring MVC 模型数据绑定:addAttribute 与 put 方法详解
  • 【区块链+ 人才服务】“CERX Network”——基于 FISCO BCOS 的研学资源交换网络 | FISCO BCOS 应用案例
  • ESLint常见错误
  • 看纪录片抵学分,贺桂梅:纪录片是对抗低质碎片信息的好媒介
  • 扬州市中医院“药膳面包”走红,内含党参、黄芪等中药材
  • 来上海喝云南咖啡!上海国际咖啡文化节助力咖啡产业破圈出海
  • 王毅:时代不容倒退,公道自在人心
  • 工业富联一季度净利增长25%,云计算业务营收增长超50%
  • 上海“模速空间”:将形成人工智能“北斗七星”和群星态势