一、maven安装
如安装目录:D:\software\maven\maven-3.6.1
配置文件目录:D:\software\maven\maven-3.6.1\conf
settings.xml
主要配置两个地方:
1.本地仓库,就是jar包和相关依赖文件存储的目录
可改成自己对应的目录。
<localRepository>D:\software\maven\resp</localRepository>
2.远程仓库地址。可改成自己的私有服务器安装的maven仓库。
<mirror>
<id>aliyun public</id>
<mirrorOf>central</mirrorOf>
<name>aliyun public</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
maven先从本地仓库查找jar,如果没有就去远程仓库查找,查找到就下载到本地仓库。
二、开发工具中引入maven,以Spring tool suite4为例。
1.配置maven安装的地址。
2.配置引用的配置。
三、项目中使用maven pom文件。例子:
1.基本配置
<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">
<!-- 模型版本。maven2.0必须是这样写,现在是maven2唯一支持的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成,
如com.winner.trade,maven会将该项目打成的jar包放本地路径:/com/winner/trade -->
<groupId>com.winner.trade</groupId>
<!-- 本项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>trade-core</artifactId>
<!-- 本项目目前所处的版本号 -->
<version>1.0.0-SNAPSHOT</version>
<!-- 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par,默认为jar -->
<packaging>jar</packaging>
<!-- 帮助定义构件输出的一些附属构件,附属构件与主构件对应,有时候需要加上classifier才能唯一的确定该构件
不能直接定义项目的classifer,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的 -->
<classifier>...</classifier>
<!-- 定义本项目的依赖关系 -->
<dependencies>
<!-- 每个dependency都对应这一个jar包 -->
<dependency>
<!-- 一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构件,
然后引入你的工程。如果别人想引用你现在开发的这个项目(前提是已开发完毕并发布到了远程仓库),
就需要在他的pom文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入,
maven就会把你上传的jar包下载到他的本地 -->
<groupId>com.winner.trade</groupId>
<artifactId>trade-test</artifactId>
<version>1.0.0-SNAPSHOT</version>
<!-- maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。
scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围) -->
<scope>test</scope>
<!-- 设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似 。 -->
<optional>false</optional>
<!-- 屏蔽依赖关系。
比如项目中使用的libA依赖某个库的1.0版,libB依赖某个库的2.0版,现在想统一使用2.0版,就应该屏蔽掉对1.0版的依赖 -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 为pom定义一些常量,在pom中的其它地方可以直接引用
使用方式 如下 :${file.encoding} -->
<properties>
<file.encoding>UTF-8</file.encoding>
<java.source.version>1.5</java.source.version>
<java.target.version>1.5</java.target.version>
</properties>
...
</project>
2.构建配置
<build>
<!-- 产生的构件的文件名,默认值是${artifactId}-${version}。 -->
<finalName>myPorjectName</finalName>
<!-- 构建产生的所有文件存放的目录,默认为${basedir}/target,即项目根目录下的target -->
<directory>${basedir}/target</directory>
<!-- 当项目没有规定目标(Maven2 叫做阶段(phase))时的默认值,
必须跟命令行上的参数相同例如jar:jar,或者与某个阶段(phase)相同例如install、compile等 -->
<defaultGoal>install</defaultGoal>
<!-- 当filtering开关打开时,使用到的过滤器属性文件列表。
项目配置信息中诸如${spring.version}之类的占位符会被属性文件中的实际值替换掉 -->
<filters>
<filter>../filter.properties</filter>
</filters>
<!-- 项目相关的所有资源路径列表,例如和项目相关的配置文件、属性文件,这些资源被包含在最终的打包文件里。 -->
<resources>
<resource>
<!-- 描述了资源的目标路径。该路径相对target/classes目录(例如${project.build.outputDirectory})。
举个例子,如果你想资源在特定的包里(org.apache.maven.messages),你就必须该元素设置为org/apache/maven/messages。
然而,如果你只是想把资源放到源码目录结构里,就不需要该配置。 -->
<targetPath>resources</targetPath>
<!-- 是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。 -->
<filtering>true</filtering>
<!-- 描述存放资源的目录,该路径相对POM路径 -->
<directory>src/main/resources</directory>
<!-- 包含的模式列表 -->
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!-- 排除的模式列表
如果<include>与<exclude>划定的范围存在冲突,以<exclude>为准 -->
<excludes>
<exclude>jdbc.properties</exclude>
</excludes>
</resource>
</resources>
<!-- 单元测试相关的所有资源路径,配制方法与resources类似-->
<testResources>
<testResource>
<targetPath /><filtering /><directory /><includes /><excludes />
</testResource>
</testResources>
<!-- 项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 -->
<sourceDirectory>${basedir}\src\main\java</sourceDirectory>
<!-- 项目脚本源码目录,该目录和源码目录不同,
绝大多数情况下,该目录下的内容会被拷贝到输出目录(因为脚本是被解释的,而不是被编译的)。 -->
<scriptSourceDirectory>${basedir}\src\main\scripts</scriptSourceDirectory>
<!-- 项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 -->
<testSourceDirectory>${basedir}\src\test\java</testSourceDirectory>
<!-- 被编译过的应用程序class文件存放的目录。 -->
<outputDirectory>${basedir}\target\classes</outputDirectory>
<!-- 被编译过的测试class文件存放的目录。 -->
<testOutputDirectory>${basedir}\target\test-classes</testOutputDirectory>
<!-- 项目的一系列构建扩展,它们是一系列build过程中要使用的产品,会包含在running bulid‘s classpath里面。
他们可以开启extensions,也可以通过提供条件来激活plugins。
简单来讲,extensions是在build过程被激活的产品-->
<extensions>
<!-- 例如,通常情况下,程序开发完成后部署到线上Linux服务器,可能需要经历打包、
将包文件传到服务器、SSH连上服务器、敲命令启动程序等一系列繁琐的步骤。
实际上这些步骤都可以通过Maven的一个插件 wagon-maven-plugin 来自动完成
下面的扩展插件wagon-ssh用于通过SSH的方式连接远程服务器,
类似的还有支持ftp方式的wagon-ftp插件 -->
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.8</version>
</extension>
</extensions>
<!-- 使用的插件列表 。 -->
<plugins>
<plugin>
<groupId></groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<!-- 在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。 -->
<executions>
<execution>
<!-- 执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标 -->
<id>assembly</id>
<!-- 绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段 -->
<phase>package</phase>
<!-- 配置的执行目标 -->
<goals>
<goal>single</goal>
</goals>
<!-- 配置是否被传播到子POM -->
<inherited>false</inherited>
</execution>
</executions>
<!-- 作为DOM对象的配置,配置项因插件而异 -->
<configuration>
<finalName>${finalName}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptor>assembly.xml</descriptor>
</configuration>
<!-- 是否从该插件下载Maven扩展(例如打包和类型处理器),
由于性能原因,只有在真需要下载时,该元素才被设置成true。 -->
<extensions>false</extensions>
<!-- 项目引入插件所需要的额外依赖 -->
<dependencies>
<dependency>...</dependency>
</dependencies>
<!-- 任何配置是否被传播到子项目 -->
<inherited>true</inherited>
</plugin>
</plugins>
<!-- 主要定义插件的共同元素、扩展元素集合,类似于dependencyManagement,
所有继承于此项目的子项目都能使用。该插件配置项直到被引用时才会被解析或绑定到生命周期。
给定插件的任何本地配置都会覆盖这里的配置 -->
<pluginManagement>
<plugins>...</plugins>
</pluginManagement>
</build>
Maven是一种项目管理工具,用于管理Java项目的构建、报告和文档的自动化。在Maven中,项目通常由一个根目录下的pom.xml文件定义,该文件包含了项目的元数据和依赖项。
在Maven中,各个节点通常是指pom.xml文件中的元素,用于描述项目的属性和配置。以下是一些常见的Maven节点及其解读:
- <project>:根节点,代表Maven项目的根元素。
- <groupId>:项目的组ID,用于标识项目的组织和位置。
- <artifactId>:项目的artifactID,用于标识项目的名称。
- <version>:项目的版本号,用于标识项目的版本。
- <packaging>:项目的包装类型,用于指定项目是jar、war还是其他类型。
- <name>:项目的名称,用于描述项目的名称。
- <description>:项目的描述,用于描述项目的简要说明。
- <url>:项目的URL,用于提供项目的在线地址。
- <properties>:用于定义项目属性,可以在其他节点中引用这些属性。
- <dependencies>:列出项目的依赖项,用于指定项目所依赖的其他库和组件。
- <dependencyManagement>:用于管理项目的依赖项版本,确保不同依赖项之间的兼容性。
- <build>:定义项目的构建配置,包括编译、测试和打包等阶段。
- <plugins>:列出项目使用的插件,用于执行特定任务,如编译、打包和部署等。
- <pluginManagement>:用于管理插件的版本,确保插件之间的兼容性。
- <profiles>:定义项目的配置文件,可以包含特定的属性、依赖项和插件配置。
这些节点只是Maven中常见的节点之一,实际上还有其他节点可用。通过编辑pom.xml文件,可以配置和管理Maven项目的各个方面。