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文件结构如下:

bash 复制代码
<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的依赖:

bash 复制代码
<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版本:

bash 复制代码
<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中重用:

bash 复制代码
<properties>
    <java.version>1.8</java.version>
    <spring-boot.version>2.5.4</spring-boot.version>
</properties>

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

bash 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>${spring-boot.version}</version>
</dependency>

5. 配置仓库(可选)

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

bash 复制代码
<repositories>
    <repository>
        <id>my-repo</id>
        <url>http://myrepository.com/repo</url>
    </repository>
</repositories>

6. 父项目(可选)

如果你的项目继承自另一个项目,可以使用parent元素:

bash 复制代码
<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
bash 复制代码
<project > :文件的根节点。(固定的)
  • modelversion
bash 复制代码
<modelversion > :pom.xml使用的对象模型版本(一般也都是4.0.0版本)
  • groupId
bash 复制代码
<groupId > :创建项目的组织或团体的唯一Id。
  • artifactId
bash 复制代码
<artifactId > :项目的唯一Id, 可视为项目名。
  • version
bash 复制代码
<version > :产品的版本号。
注意:groupId ,artifactId ,version 这三个称之为项目坐标,因为这三个组合在一起可以唯一锁定项目在仓库中的位置,因此,如果要寻找一个项目,先要获得其项目坐标,格式:仓库/groupId/artifactId/version/项目包(jar、war)
  • packaging
bash 复制代码
<packaging > :打包类型,一般有jar、war、pom 等 
jar包 ------- 简单java项目
war包 -----  web项目
pom ----- 父项目,提供pom被子项目继承 
  • name
bash 复制代码
<name > :项目的显示名,常用于 Maven 生成的文档。
问题:关于artifactId、name、工程名是否必须一致?
三者可以不一致!
其作用区别是什么?
通过两个测试:
1、如果使用tomcat:run 运行项目,访问项目通过 artifactId 属性
2、在项目编译打包、安装部署,还是使用artifactId属性
通过测试发现:Name属性只是用来生成文档中显示,不会影响到工程发布和打包等,写什么都无所谓。而工程本身的名字也对工程发布和打包没有影响,也无所谓。
  • description
bash 复制代码
<description > :项目描述,常用于 Maven 生成的文档
  • dependencies/dependency
    完整的dependency 配置如下:
bash 复制代码
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
bash 复制代码
  <!-- 统一维护版本-定义本地属性 -->
  <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测试插件
    主要功能是输出日志和报告。
bash 复制代码
可解决两个问题:
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端口

如何修改端口?

添加插件:

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

乱码:
覆盖为utf-8

8.汇总如下:

bash 复制代码
<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>
相关推荐
鬼多不菜10 分钟前
一篇学习CSS的笔记
java·前端·css
深色風信子11 分钟前
Eclipse 插件开发 5.3 编辑器 监听输入
java·eclipse·编辑器·编辑器 监听输入·插件 监听输入
Blossom.11829 分钟前
人工智能在智能健康监测中的创新应用与未来趋势
java·人工智能·深度学习·机器学习·语音识别
shangjg339 分钟前
Kafka 如何保证不重复消费
java·分布式·后端·kafka
无处不在的海贼1 小时前
小明的Java面试奇遇之互联网保险系统架构与性能优化
java·面试·架构
Layux1 小时前
flowable候选人及候选人组(Candidate Users 、Candidate Groups)的应用包含拾取、归还、交接
java·数据库
Mylvzi1 小时前
Spring Boot 中 @RequestParam 和 @RequestPart 的区别详解(含实际项目案例)
java·spring boot·后端
Magnum Lehar1 小时前
vulkan游戏引擎的核心交换链swapchain实现
java·前端·游戏引擎
半青年2 小时前
IEC61850规约客户端软件开发实战(第二章)
java·c++·qt·网络协议·c#·信息与通信·iec61850