您的位置:首页 > 其它

初识Maven(一)

2018-02-23 11:09 281 查看
官方文档:http://maven.apache.org/guides/index.html

Maven 项目的目录结构

src
-main
-java
-package
-resources
-test
-java
-package
-resources


Maven 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/maven-v4_0_0.xsd"> 
<!--指定了当前pom的版本,必须的-->
<modelVersion>4.0.0</modelVersion>

<!--groupId 项目的包名(反写的公司网址+项目名)-->
<groupId>spring-boot-imooc-demo</groupId>

<!--artifactId 模块名(项目名+模块名)-->
<artifactId>lxd-springboot-demo</artifactId>

<!--项目打包方式
默认是jar
其他方式:war、zip、pom
-->
<packaging>jar</packaging>

<!--版本,0.0.1-SNAPSHOT快照版本
| 第一个0表示大版本号
| 第二个0表示分支版本号
| 第三个1表示小版本号
SNAPSHOT (快照)
ALPHA (内部测试)
BETA (公测)
RELEASE (稳定)
GA (正式发布)
-->
<version>0.0.1-SNAPSHOT</version>

<!-- 项目描述名 -->
<name>lxd-springboot-demo</name>

<!-- 项目地址 -->
<url></url>

<!-- 项目描述 -->
<description></description>

<!-- 开发者 -->
<developers></developers>

<!-- 许可证信息(如开源框架) -->
<licenses></licenses>

<!-- 组织信息 -->
<organization></organization>

<!-- 依赖列表 -->
<dependencies>

<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<scope></scope>
<!-- 设置依赖是否可选true/false -->
<optional></optional>
<!-- 排除依赖传递列表 -->
<exclusions>
<exclusion>
</exclusion>
</exclusions>
</dependency>

</dependencies>

<!-- 依赖的管理 抽象出一个父模块(共同使用的模块),用来供子模块来继承 -->
<dependencyManagement>

<dependencies>

<dependency></dependency>

</dependencies>

</dependencyManagement>

<build>
<!-- 插件列表 -->
<plugins>

<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>

</plugins>

</build>

<!--在子模块中对父模块的继承-->
<parent></parent>

<!-- 聚合运行多个的模块,集中进行编译 -->
<modules>
<module></module>
</modules>

</project>


Maven 常用构建命令

mvn

- -v 查看maven版本

- compile 编译

- test 测试

- package 打包,在target目录下生成一个jar包/war包

- clean 删除target目录

- install 安装jar包到本地仓库中

创建目录的两种方式:

archetype:generate 按照提示进行选择

archetype:generate -DgroupId=组织名(公司网址的反写+项目名)

-DartifactId=项目名-模块名

-Dversion=版本号

-Dpackage=代码所在的包名

Maven中的坐标和仓库

坐标

构件


仓库

本地仓库和远程仓库


镜像仓库

<!--阿里镜像仓库-->
<mirror>
<!--唯一标识-->
<id>alimaven</id>
<!--镜像名称-->
<name>aliyun maven</name>
<!--镜像地址-->
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>


本地仓库存储位置

<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<!--修改仓库存储位置-->
<localRepository>D:/Maven/m2/repository/</localRepository>


完整的项目构建过程:

清理、编译、测试、打包、集成测试、验证、部署

clean、validate、compile、test、package、verify、install、deploy

Maven生命周期:

clean 清理项目

per-clean 执行清理前的工作

clean 清理上一次构建生成的所有文件

post-clean 执行清理后的文件

default 构建项目(最核心)

compile

test

package

install

site 生成项目站点

pre-site 在生成项目站点前要完成的工作

site 生成项目的站点文档

post-site 在生成项目站点后要完成的工作

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

Maven插件

<build>

<plugins>
<!--Spring Boot的Maven插件 可以将项目打包成一个可执行jar -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

<!--Maven的一个插件,将源代码打包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<!--package阶段运行source插件-->
<phase>package</phase>
</execution>
<goals>
<!--运行目标-->
<goal>jar-no-fork</goal>
</goals>
</executions>
</plugin>

</plugins>

</build>


Maven pom.xml常用元素介绍

pom.xml 依赖范围

例如:

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>


三种classpath:

1. 编译

2. 测试

3. 运行

Dependency Scope:

- compile 默认的范围,编译测试运行都有效

- provided 在编译和测试时有效

- runtime 在运行时和测试时有效

- test 只在测试时有效

- system 编译和测试时有效,与本机系统相关联,可移植性差

- import 导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置(继承过来的依赖)

Maven依赖传递

修改Maven默认JDK编译版本

在setting.xml中,找到profile 添加如下代码

<profile>
<id>jdk-1.7</id>

<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>

<properties>
<maven.compiler.source>1.7</mave
eee0
n.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>

</profile>


依赖冲突

解决原则:

1.短路优先

A->B->C-X(jar)

A->D->X(jar) 优先解析

2.先声明先优先

如果路径长度相同,则谁先声明,先解析谁

聚合和继承

- 聚合

解决方法:

1.步骤一

新建一个项目,将打包方式修改为pom

<!-- 打包方式为pom -->
<packaging>pom</packaging>


步骤二

将项目聚合到modules里面,集中打包

<!-- 聚合运行多个的模块,集中进行编译 -->
<modules>
<module>../hongxing-bge</module>
<module>../hongxing-nange</module>
<module>../hongxing-shanji</module>
</modules>


继承

解决方法

1. 步骤一

新建一个项目hongxing-parent,pom中添加

<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!--可抽象出来版本放到最上面-->
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>


可将4.9抽取出来,替换

<properties>
<junit.version>4.9</junit.version>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!--可抽象出来版本,类似EL表达式一样调用-->
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>


将打包方式修改为pom

<packaging>pom</packaging>


步骤二

在hongxing-bge中去掉junit的依赖版本(标签),添加

<parent>
<groupId>com.hongxing</groupId>
<artifactId>hongxing-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>


使用Maven创建Web项目

添加servlet依赖

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<!-- 只在编译时和测试时运行 -->
<scope>provided</scope>
</dependency>
</dependencies>


添加Jetty插件

<build>
<finalName></finalName>
<plugins>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.16v20140903</version>
<executions>
<execution>
<!--在打包成功后使用jetty:run来运行jetty服务-->
<phase>package</phase>
</execution>
<goals>
<!--运行目标-->
<goal>run</goal>
</goals>
</executions>
</plugins>
</build>


项目右键,maven-build 输入:jetty:run

此时jetty容器启动

4.如果是tomcat容器,插件

<build>
<!--名称作用:启动成功后,访问的路径为
|http://localhost8080/webdemo
-->
<finalName>webdemo</finalName>
<plugins>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<!--在打包成功后使用tomcat:run来运行tomcat服务-->
<phase>package</phase>
</execution>
<goals>
<!--运行目标-->
<goal>run</goal>
</goals>
</executions>
</plugins>
</build>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: