maven入门基础

Maven的基本使用与生命周期

1.Maven是什么

Maven是一种构建工具(构建是指例如完成清理,编译,测试,打包,发布等一些自定义的过程),类似于make(最早的构建工具,通过一系列目标和依赖将整个构建过程串联起来,同时利用本地命令完成每个目标的实际行为),ant(ant可以看成一个java版 的make,ant 可以跨平台(基于java的原因),且使用xml定义构建脚本,相对于make来说更友好),gradle(基于ant与maven的开发,后续可能取代maven,就好像git逐渐取代svn)

2. maven的安装

下载地址:http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.3/binaries/

安装:https://jingyan.baidu.com/article/6c67b1d646ae842786bb1e7a.html

3.maven的安装目录解析

bin: 该目录包含了mvn的运行的脚本

boot: 只包含一个文件类加载器框架,保证maven加载自己的类库

conf:配置文件,里面有一个非常重要的setting.xml文件,直接修改可以用于全局,但是一般更偏向于复制到用户目录/.m2/目录下然后修改文件,作用范围为用户范围。

修改仓库地址:

修改setting.xml(最好是用户目录)<localRepository>/path/to/local/repo</localRepository>,默认的位置在Default: ${user.home}/.m2/repository,在seting.xml的文件中有说明

4.maven文件的结构(运行tree/F)

备注:可以手动建立,可以采用mvn  archetype:generate 来建立,也可以采用eclipse的maven插件自动生成等,实现原则约定优于配置

5.pom配置简要说明

<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.cgz.cgz</groupId>

<artifactId>maventest</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name></name>

</project>

说明:

xsd约束文件;

modelVersion 版本,POM文件是遵从哪个版本的项目描述符,默认一般不要去更改

groudID  通常是公司名加项目组

artifactid 项目组中项目的id(唯一)

version  版本,SNAPSHOT表示快照版,在通常情况下不稳定,不建议使用,建议使用release版本较为稳定

name:可以省略不写,通常情况下建议写,进一步对项目的名称进行说明。

package:打包方式,jar,war,pom,package,默认为jar

6.maven在windows下的常用命令

mvn  compile  编译  相应的产生一个target文件夹

mvn  clean 清除 删除target文件

mvn  test  测试

mvn  package 打包

mvn  install 将其打包加入本地仓库

7.maven的生命周期

maven的生命周期有3个,clean清理(clean插件),default构建项目(一系列插件),site建立项目网点(site插件)

整个生命周期如下

Pre-clean 执行一些清理前需要完成的工作------Clean 清理上一次构建生成的文件--------Post-clean 执行一些清理后需要完成的工作-----Clean命令 实现的是pre-clean和clean阶段

Default生命周期

validate ----Initialize----generate-sources----process-sources----generate-resources-----process-resources----compile----process-classes----generate-test-sources--process-test-sources----generate-test-resources----process-testresources----test-compile----process –test-classes----test----prepare-package---package---pre-integration-test----integration-test-----post-integration-test----verify---install---deploy

site生命周期

pre-site 执行一些在生成项目站点之前需要完成的工作

site 生成项目站点文档

post-site 执行 一些在生成项目站点之后需要 完成的工作

site-deploy 生成站点 发布到服务器上

备注

svn compile  从validate运行到compile 阶段

svn test 从validate运行到test阶段

svn package 从validate运行到package 阶段

svn insatall 从validate运行到deploy 阶段

svn clean deploy  site-deploy  会执行3个阶段的所有的生命周期

建议使用mvn clean compile,mvn clean test ,mvn clean package, mvn clean install连用,因为上述可能存在缓存导致例如compile后修改配置的scope再使用test,不会再次使用compile,而是在compile的基础上进行test。

8.依赖

配置

<dependencies>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

<type>...</type>

<scope>provided</scope>

<exclusions>

<exclusion>...</exclusion>

...

</exclusions>

<optional>...</optional>

</dependency>

<dependencies>

groupId,artifactid,version类似于上,scope依赖范围(默认为compile),

type类似于上的package(默认为jar),exclusions排除传递性依赖(排除依赖pom中的依赖,排除具有传递性),options 可选依赖(不具有传递性)

2)依赖的范围和传递性

依赖范围就是用来控制依赖与3种classpath之间的关系(编译classpath,测试claspath,运行classpath)

compile:编译依赖的范围,编译,测试,运行三种classpath都有效(具有传递性)

test:对测试范围有效(不具有传递性,且不会编译在src/main/java下的内容)

provided:对编译和测试有效(不具有传递性)

3)依赖树的查看

mvn  dependency:list  查看依赖树

mvn dependency:tree 更加清晰的看到依赖由那条路径引入

mvn dependency:analyze 可帮助显示当前项目的直接依赖

9.聚合与继承

1)聚合

聚合的创建:与普通maven项目类似(maven project项目),packaging的值为pom

被聚集项目的创建--父项目右键创建(maven module)

聚合的配置:

<modelVersion>4.0.0</modelVersion>

<groupId>com.cgz</groupId>

<artifactId>polymerizationtest</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>pom</packaging>

<modules>

<module>polymerization-child1</module>

<module>polymerization-child2</module>

<module>../polymerization-child3</module>

</modules>

备注:<module>../polymerization-child3</module>聚合的相对路径

2)继承

继承的创建类似聚合,但是在配置中相应的添加了依赖和插件的继承

依赖的继承方式1:

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

<scope>test</scope>

<relativePath>../polymerizationtest/pom.xml</relativePath>

</dependency>

</dependencies>

备注:<relativePath>../polymerizationtest/pom.xml</relativePath>相对于该pom的父pom的相对位置

依赖的可选继承(建议使用)

<dependencyManagement>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

<scope>test</scope>

</dependency>

</dependencies>

</dependencyManagement>

上述依赖不会添加任何的依赖,需要依赖那么需要在子pom配置中添加类似如下配置

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

</dependency>

</dependencies>

备注:<dependencyManagement>对依赖的管理下不会进行添加任何的依赖,可以按需添加

插件的继承方式1

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-source-plugin</artifactId>

<version>2.1.1</version>

<executions>

<execution>

<id>attach-sources</id>

<phase>verify</phase>

<goals>

<goal>jar-no-fork</goal>

</goals>

</execution>

</executions>

</plugin>

</plugins>

</build>

插件的可选继承

<build>

<pluginManagement>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-source-plugin</artifactId>

<version>2.1.1</version>

<executions>

<execution>

<id>attach-sources</id>

<phase>verify</phase>

<goals>

<goal>jar-no-fork</goal>

</goals>

</execution>

</executions>

</plugin>

</plugins>

</pluginManagement>

</build>

上述依赖不会添加任何的依赖,需要依赖那么需要在子pom配置中添加类似如下配置

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-source-plugin</artifactId>

</plugin>

</plugins>

</build>

备注:<pluginManagement>对插件的管理下不会添加任何的插件,可以按需添加

3)可继承元素

groupId:项目组ID,项目坐标的核心元素。

version:项目版本,项目坐标的核心元素。

description:项目的描述信息。

organization:项目的组织信息。

inceptionYear:项目的创始年份。

url:项目的URL地址。

developers:项目的开发者信息。

contributors:项目的贡献者信息。

distributionManagement:项目的部署配置。

issueManagement:项目的缺陷跟踪系统信息。

ciManagement:项目的持续集成系统信息。

scm:项目的版本控制系统信息。

mailingLists:项目的邮件列表信息。

properties:自定义的Maven属性。

dependencies:项目的依赖配置。

dependencyManagement:项目的依赖管理配置。

repositories:项目的仓库配置。

build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等。

reporting:包括项目的报告输出目录配置、报告插件配置等。

4)依赖的归类

<properties>

<springframework.version>5.0.4.RELEASE</springframework.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>${springframework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-beans</artifactId>

<version>${springframework.version}</version>

</dependency>

</dependencies>

10.其他

1)eclipse maven项目的导入

Import –maven –existing maven project

2)eclipse查看仓库地址

Window—preference—maven –usersetting ,在用户目录下setting.xml文件中的仓库位置配置

3)eclipse添加本地的依赖

4)eclipse显示仓库

Window—show view—others—maven—maven repositories

5)eclipse war的运行测试

tomcat:run

6)http代理(基于安全因素,要求通过安全认证才能够访问,这时候就需要http代理)

在setting.xml中的<proxies>里添加如下配置

<proxy>

<id>optional</id>

<active>true</active>

<protocol>http</protocol>

<username>proxyuser</username>

<password>proxypass</password>

<host>proxy.host.net</host>

<port>80</port>

<nonProxyHosts>local.net|some.host.com</nonProxyHosts>

</proxy>

备注:<nonProxyHosts>用来指定那些主机名不需要代理,可以用|符号来分隔多个主机名,支持通配符,如*

11.maven运用过程中遇到的一些问题和解决方法。

1)[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!

解决方法:在pom.xml中添加如下配置

<properties><project.build.sourceEncoding> UTF-8</project.build.sourceEncoding>

</properties>

2)项目下的文件及文件夹没有报错,但是该项目的项目文件夹报错

解决方法:在该项目上鼠标右键,选择maven,然后选择update project,这个会在修改pom后经常出现

3)Error code 401, Unauthorized

解决方法:在~/.m2文件夹下添加setting文件,并在setting文件中的servers中添加相应的server认证

4)maven的packaging为war时缺少文件

解决方法:该项目鼠标右键选择properties,然后选择project facts,然后取消Dynamic web module  选择应用 ,然后选择Dynamic web module 选择应用

5)ERROR]No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

解决方法:点击window选择properties,然后选择java下的install jres ,配置相应的正确的jdk路径和jdk,而不是jre

6)修改jdk版本

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.7.0</version>

<configuration>

<source>1.8</source>

<target>1.8</target>

<encoding>UTF-8</encoding>

</configuration>

</plugin>

也可以在setting中配置成全局的配置

<profile>

<id>jdk-1.8</id>

<activation>

<activeByDefault>true</activeByDefault>

<jdk>1.8</jdk>

</activation>

<properties>

<maven.compiler.source>1.8</maven.compiler.source>

<maven.compiler.target>1.8</maven.compiler.target>

<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>

</properties>

</profile>

原文地址:https://www.cnblogs.com/gg128/p/9311872.html

时间: 2024-10-03 00:56:57

maven入门基础的相关文章

maven入门基础:远程仓库的配置和认证(二)

一. 远程仓库的配置 1. 配置方法一:在当前项目的POM.xml文件中配置(不推荐,当maven项目多时,比较麻烦) 路径:D:\program\IntelliJ IDEA 2019.1.3\lib\maven-model-builder-3.3.9\org\apache\maven\model\pom-4.0.0.xml <repositories> <repository> <id>central</id> #central:中央仓库唯一标识 <

maven入门基础:公开仓库—maven查找依赖的网站(五)

一. Nexus搜索 1. 概念:它是功能强大的Maven管理工具 2. 地址:http://repository.sonatype.org/ 3. 代理的仓库包括: (1) central:中央仓库 (2) JBoss (3) Java.net 二. Jarvana搜索 1. 地址:http://www.jarvana.com/jarvana/ 2. 代理的仓库包括: (1) central:中央仓库 (2) JBoss (3) Java.net 三. MVNbrowser搜索 1. 地址:h

maven入门基础:创建nexus代理仓库(九)

阿里云服务端代理地址:http://maven.aliyun.com/nexus/content/groups/public/ 其他参照:https://www.cnblogs.com/my_captain/p/12243521.html 原文地址:https://www.cnblogs.com/my_captain/p/12243586.html

maven入门基础:配置maven从nexus下载构件(十四)

一. 单个pom.xml形式:适合单个项目 <repositories> <repository> <id>nexus</id> <name>Nexus</name> <url>http://192.168.0.105:8086/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> <

maven入门基础:使用maven部署构件到nexus(十五)

一. 在setting.xml中设置发布用户的用户名和密码 账号密码:deployment,deployment123 <servers> <!-- 设置私服用户名和密码 --> <server> <id>nexus-release</id> <username>deployment</username> <password>deployment123</password> </server&

maven入门基础:nexus的仓库介绍(七)

一. nexus的内置仓库 1. 仓库列表 查看方式:点击左边的Repositories 二. 列说明 1. 仓库名 Central:中央仓库 3rd party:第三方仓库,比如手工上传的jar包就保存在这里 Apache Snapshots:apache 快照仓库 Releases:发行版本仓库 Public Respositories:仓库组,是上述所有仓库的聚合,对外提供统一的地址服务 2. 类型分类 group:仓库组,比如:Public Respositories hosted:宿主

maven入门基础:创建nexus宿主仓库(八)

  原文地址:https://www.cnblogs.com/my_captain/p/12243521.html

maven入门基础:创建nexus仓库组(十)

原文地址:https://www.cnblogs.com/my_captain/p/12243598.html

maven入门基础:nexus的权限管理(十六)

一. nexus预定了三个用户 预定角色和权限对应如下 用户 密码 权限 管理员:admin admin123 最高权限 发布用户:deployment deployment123 1. 浏览仓库 2. 搜索仓库 3. 上传构建 匿名用户(未登陆用户):anonymous  没有默认密码 1. 浏览仓库 2. 搜索仓库 二. 角色 1. 预定角色:47个 (1) 针对不同仓库类型中的所有仓库预定的角色:Repo开头 (2) 针对界面预定的角色:UI开头 (3) 针对用户预定的角色:Nexus开头