Maven基础

Maven是Apache的一个顶级的项目:http://maven.apache.org/


Maven这个单词来自于意第绪语,意为知识的积累,最早在Jakata Turbine项目中它被用来简化项目的构建过程。当时有很多项目,它们的Ant build文件仅有细微的差别,而JAR文件都由CVS来维护。于是Maven创始者开始了Maven这个项目,该项目的清晰定义包括,一种很方便的发布 项目信息的方式,以及一种在多个项目中共享JAR的方式。


Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定 义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。


Maven 包含一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。


此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。


Maven 能够帮助我们干什么?


简言之,Maven 可以帮助我们完成以下工作:


项目构建
文档管理
生成测试报告
解决项目间依赖项
源代码版本管理
项目Releases
项目的分发
Maven 关键词


Project:
任何你想 build 的事物,Maven都会把它们当作是一个 Project。
这些 Project 被定义为 POM(Project Object Model)。
一个 Project 可以依赖其他的project,一个 project 也可以有多个子project组成。
POM:
POM(pom.xml) 是 Maven 的核心文件,它是指示 Maven 如何工作的元数据文件,类似 ant 的 build.xml 文件。pom.xml 文件应该位于每个 Project 的根目录。


GroupId:
顾名思义,这个应该是公司名或组织名。


ArtifactId:
构建出来的文件名,一般来说或,这个也是project名。


Packaging:
项目打包的类型,可以是将jar、war、rar、ear、pom,默认是jar。


Version:
项目的版本,项目的唯一标识由 groupId+artifactId+packaging+versionz 组成。


Dependency:
为了能够 build 或运行,一个典型的java project会依赖其他的包,在Maven中,这些被依赖的包就被称为 dependency。


Plug-in:
Maven是有插件组织的,它的每一个功能都是由插件提供的,主要的插件是由 java 来写的,但是他也支持 beanshell 和 ant 脚本编写的插件。


Repository:
仓库用来存放artifact的,可以是本地仓库,也可以是远程仓库,Maven是由一个默认的仓库


Snapshot:
工程中可以(也应该)有这样一个特殊的版本:这个版本可以告诉Maven,该工程正在处于开发阶段,会经常更新(但还为发布)。当其他工程依赖此类型的artifact时,Maven会在仓库中寻找该artifact的最新版本,并自动下载、使用该最新版本。






Maven 常见命令
mvn archetype:create 创建Maven项目
mvn compile 编译源代码
mvn test 运行应用程序中的单元测试
mvn install 在本地Respository中安装jar
mvn eclipse:eclipse 生成eclipse项目文件
mvn jetty:run 启动jetty服务
mvn clean 清除项目目录中的生成结果
mvn site 生成项目相关信息的网站
mvn package 根据项目生成的jar
项目目录可以用mvnw
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
</dependency>


Maven的默认生命周期
Default Lifecycle 生命周期阶段 描述
validate 验证 确保当前配置和 POM 的内容是有效的。这包含对 pom.xml 文件树的验证。
initialize 初始化 在执行构建生命周期的主任务之前可以进行初始化。
generate-sources 生成源码 代码生成器可以开始生成在以后阶段中处理或编译的源代码。
process-sources 处理源码 提供解析、修改和转换源码。常规源码和生成的源码都可以在这里处理。
generate-resources 生成资源 可以生成非源码资源。通常包括元数据文件和配置文件。
process-resources 处理资源 处理非源码资源。修改、转换和重定位资源都能在这阶段发生。
compile 编译 编译源码。编译过的类被放到目标目录树中。
process-classes 处理类 处理类文件转换和增强步骤。字节码交织器和常用工具常在这一阶段操作。
generate-test-sources 生成测试源码 mojo 可以生成要操作的单元测试代码。
process-test-sources 处理测试源码 在编译前对测试源码执行任何必要的处理。在这一阶段,可以修改、转换或复制源代码。
generate-test-resources 生成测试资源 允许生成与测试相关的(非源码)资源。
process-test-resources 处理测试资源 可以处理、转换和重新定位与测试相关的资源。
test-compile 测试编译 编译单元测试的源码。
process-test-classes 对测试编译生成的文件做后期处理(需Maven2.0.5及以上)
test 测试 运行编译过的单元测试并累计结果。
prepare-package 执行打包前的所有操作(需Maven2.1及以上)
package 打包 将可执行的二进制文件打包到一个分布式归档文件中,如 JAR 或 WAR。
pre-integration-test 前集成测试 准备集成测试。这种情况下的集成测试是指在一个受到一定控制的模拟的真实部署环境中测试代码。这一步能将归档文件部署到一个服务器上执行。
integration-test 集成测试 执行真正的集成测试。
post-integration-test 后集成测试 解除集成测试准备。这一步涉及测试环境重置或重新初始化。
verify 检验 检验可部署归档的有效性和完整性。过了这个阶段,将安装该归档。
install 安装 将该归档添加到本地 Maven 目录。这一步让其他可能依赖该归档的模块可以使用它。
deploy 部署 将该归档添加到远程 Maven 目录。这一步让这个工件能为更多的人所用。




国内访问仓库可能有问题
配置settings.xml
<mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
使用阿里云仓库:http://maven.aliyun.com/nexus/content/groups/public




pom.xml
<?xml version="1.0" encoding="UTF-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">
<!-- 这个POM文件是遵从哪个版本的项目描述符 -->
<modelVersion>4.0.0</modelVersion>


<!-- 这个应该是公司名或组织名 -->
<groupId>com.example</groupId>
<!-- 构建出来的文件名,一般来说或,这个也是project名。 -->
<artifactId>demo</artifactId>
<!-- 项目的版本,项目的唯一标识由 groupId+artifactId+packaging+versionz 组成。 -->
<version>0.0.1-SNAPSHOT</version>
<!-- 项目打包类型jar、war、rar、ear、pom,默认是jar。 -->
<packaging>jar</packaging>
<!-- project名称 -->
<name>demos</name>
<!-- 项目描述 -->
<description>This is My Project</description>


<!-- 继承一个spring的 spring-boot-starter-parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath />
</parent>


<properties>
<!-- 应用输入编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 应用输出编码 -->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- java版本 -->
<java.version>1.8</java.version>
</properties>


<dependencies>
<!-- Tomcat程序 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 监控程序 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 测试程序 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 被依赖的包就被称为dependency -->
</dependencies>

<!-- 构建项目 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>




若不想继承:它的 type 是 pom,scope 是 import,这种类型的 dependency 只能在 dependencyManagement 标签中声明。
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>


子项目中
<parent>
        <groupId>父项目的参数</groupId>
        <artifactId>父项目的参数</artifactId>
        <version>父项目的参数</version>
</parent>






如果要在项目中添加多个仓库,或者禁止(同意)一些问题
<repositories><!-- repositories的配置,你可以在它下面添加多个repository  -->
<repository>
<id>maven-net-cn</id><!-- repository都有它唯一的ID,一个描述性的name,以及远程仓库的url -->
<name>Maven China Mirror</name>
<url>http://maven.net.cn/content/groups/public/</url>
<releases><!-- 告诉Maven可以从这个仓库下载发行版的构件 -->
<enabled>true</enabled>
</releases>
<snapshots><!-- 告诉Maven不可以从这个仓库下载快照版的构件 -->
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>


<pluginRepositories>
<pluginRepository>
<!-- 配置Maven从什么地方下载插件构件 -->
<id>maven-net-cn</id>
<name>Maven China Mirror</name>
<url>http://maven.net.cn/content/groups/public/</url>
<releases><!-- 告诉Maven可以从这个仓库下载发行版的构件 -->
<enabled>true</enabled>
</releases>
<snapshots><!-- 告诉Maven不可以从这个仓库下载快照版的构件 -->
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>












<repositories>
<repository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>public</id>
<name>Public Repositories</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>Public Repositories</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</pluginRepository>
</pluginRepositories>




















<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine</artifactId>
<exclusions>//排除依赖
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值