Maven相关名词及相关配置

发布于:2025-04-16 ⋅ 阅读:(35) ⋅ 点赞:(0)

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>

网站公告

今日签到

点亮在社区的每一天
去签到