Maven学习

来源:互联网 发布:centos debian 稳定性 编辑:程序博客网 时间:2024/06/05 12:39
常用命令
mvn archetype:generate 创建Maven项目
mvn compile 编译源代码
mvn deploy 发布项目
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除项目目录中的生成结果
mvn package 根据项目生成的jar
mvn install 在本地Repository中安装jar
mvn eclipse:eclipse 生成eclipse项目文件
mvnjetty:run 启动jetty服务
mvntomcat:run 启动tomcat服务
mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类


###学习项目管理利器—maven
同类型的项目管理工具:Maven Ant gradel

##快速入门
#是什么:Maven项目管理、第三方依赖、编译、发布、插件
#安装Maven:
下载安装包https://maven.apache.org/
配置环境变量
mvn -v(查看maven版本)
#HelloWorldMaven
1、项目结构:
src(源码)
-main
-java
-package
-resources
-test
-java
-package
-resources
target(编译后生成)

2、meven编译项目:
cd 到工程目录下
mvn compile编译源代码,生成target

##meven核心知识
#常用命令
mvn compile 编译:去pom.xml找关联的本地仓库的jar包,如果找不到则去远程仓库拉到本地仓库,所以pom.xml要配置相关的jar包
mvn test 测试
mvn clean 删除target
mvn install 安装jar包到本地仓库中

#自动创建目录架构

...

#坐标和仓库
1、坐标 构件
*构件通过坐标作为其唯一标识
2、仓库
(1)本地仓库:
本地仓库默认地址:~/.m2(setting.xml里面也配置有localRepository)
(2)远程仓库:
全球中心仓库的地址
在/Users/wangyj/Documents/apache-maven-3.1.1/lib/maven-model-builder-3.1.1/org/apache/maven/model/pom-4.0.0.xml里面定义http://repo.maven.apache.org/maven2
(3)镜像仓库
A位于B的服务点
配置镜像仓库:/Users/wangyj/Documents/apache-maven-3.1.1/conf/settings.xml
配置项mirror

#Eclipse中安装Maven插件及创建Maven项目

#Maven的生命周期和插件
1、完成的项目构件过程包括:清理、编译、测试、打包、集成测试、验证、部署
2、maven生命周期(相互独立):
(1)clean 清理项目
pre-clean 执行清理前的工作
clean 清理上一次构件生成的所有文件
post-clean 执行清理后的文件
(2)default 构件项目(核心)
complie\test\package\install
(3)site 生成项目站点
pre-site 生成站点前要完成的工作
site 生成项目的站点文档
post-site 生成项目站点后要完成的工作
site-deploy 发布生成的站点到服务器上

#pom.xml解析
1、常用元素介绍pom.xml
<?xml version="1.0"encoding="UTF-8"?>
<projectxmlns="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></groupId>
<!--实际的项目名称:项目名+模块名-->
<artifactId></artifactId>
<!--第一个0表示大版本号
第二个0表示分支版本号
第三个0表示小版本号
SNAPSHOT快照
alpha内部测试
beta公测
Release稳定
GA正式发布-->
<version>1.0-SNAPSHOT</version>
<!--打包方式,默认jar
war zip pom-->
<packaging>jar</packaging>

<!--项目描述名-->
<name></name>

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

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

<!--继承哪个pom.xml-->
<parent>
<groupId></groupId>
<artifactId></artifactId>
<version>1.0-SNAPSHOT</version>
</parent>

<!--指定多个模块一起进行编译-->
<modules>
<module></module>
<module></module>
<module></module>
<module></module>
<module></module>
<module></module>
<module></module>
<module></module>
</modules>


<!--依赖坐标-->
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
</dependency>

<dependency>
<groupId></groupId>
<artifactId></artifactId>
</dependency>
</dependencies>


<build>
<!--插件列表-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

<!--依赖的管理-->
<dependencyManagement>
<dependencies>

<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

<dependency>
<groupId>com.ifrabbit</groupId>
<artifactId>spring-data-mybatis</artifactId>
<version>1.0.15.RELEASE</version>
</dependency>

<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.27</version>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-config</artifactId>
<version>1.0.4.RELEASE</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
</dependency>

<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>

<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.1.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>1.1.0.RELEASE</version>
</dependency>

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>

<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version>1.5-SNAPSHOT</version>
<!--排除依赖,禁止依赖传递-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.8</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.8</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8</version>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
<version>1.1.8.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
<version>1.1.8.RELEASE</version>
</dependency>

<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>99.0-does-not-exist</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.24</version>
</dependency>

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>

<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-engine</artifactId>
<version>6.0.1</version>
</dependency>

<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-basic</artifactId>
<version>6.0.1</version>
</dependency>

</dependencies>
</dependencyManagement>
</project>

2、maven依赖范围
scope:依赖范围(三种classPath编译、测试、运行)
官网:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
index进去

3、maven依赖传递
项目之间进行依赖
B依赖于A
B编译报错,找不到A
现将A打包,mvn package(生成一个jar包)
再讲A放到本地仓库中,mvn install
再去编译B,mvn compile

这个步骤会把依赖的依赖的联动编译依赖,如果只要依赖指定的jar
<exclusions>去掉指定的依赖

4、maven依赖冲突
(1)短路优先:A->B->C->X(jar)
A->B->X(jar)优先
(2)路径相同,声明优先

5、maven聚合和继承
<packaging>pom</packaging>
<modules></modules>
<parent></parent>

##maven建立web项目
web项目有wen.xml配置
web项目运行需要web容器,常见的web容器有:
小项目或个人项目:tomcat
大项目或者商业项目:weblgoic、webshere
其他服务器:jboss、jetty(适合小项目或者测试项目)
*以上的服务器可以用maven插件的形式配置到pom.xml实现

非web项目是不需要web服务器的

##maven学习总结
1、maven的下载和搭建
2、maven目录骨架说明:pom.xml用于管理项目依赖和构建过程
3、常用的maven命令
4、仓库和坐标
5、在eclipse安装和创建maven项目
6、生命周期、pom.xml以及依赖、聚合、继承
7、eclipse中创建web项目和jetty插件的安装