当前位置:   article > 正文

maven项目构建工具_maven.apache.org

maven.apache.org

第一章: 使用maven创建java项目

1. 本章面试题

maven的生命周期?

2. 知识点

2.1 jsp回顾

2.2 本章重点

3.  具体内容

3.1 maven简介

Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断(pom文件)能管理一个项目的构建、报告和文档等步骤。

Maven 是一个项目管理工具,可以对 Java 项目进行构建(构建jar包或者war包的过程)依赖管理(jar包的依赖关系,多模块的项目之间的依赖)。

项目的构建:在软件开发过程中最终要提交给客户成果物,j2ee一般提交的是jar或者war包。将软件代码编译打包成war包或者jar的过程叫作构建。

依赖管理:在软件开发过程中,大型项目由多个子项目协作完成,A项目依赖C项目,B项目也依赖C项目。

Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。

3.2 maven环境配置

3.2.1 安装配置环境变量

步骤一:Maven 下载地址:Maven – Download Apache Maven

步骤二:检查java环境

步骤三:解压缩maven的安装包

步骤四:配置maven的环境变量

MAVEN_HOME

D:\Program Files\apache-maven-3.6.3

在path中加入

%MAVEN_HOME%\bin

 步骤五:测试maven命令

 3.2.2 修改配置文件

D:\Program Files\apache-maven-3.6.3\conf\settings.xml

步骤一:修改中央仓库的地址,中央仓库指的是全球公用的,有部分公司涉及信息安全,普通程序员电脑无法上网。需要链接中央仓库,可以在本地设置私服。私服可以链接中央仓库。

中央仓库

https://mvnrepository.com

 159行

<mirror>

<id>nexus-aliyun</id>

<mirrorOf>*</mirrorOf>

<name>Nexus aliyun</name>

<url>http://maven.aliyun.com/nexus/content/groups/public</url>

</mirror>

步骤二:修改本地仓库的地址(55行)

<!-- 配置本地仓库的路径-->

  <localRepository>D:\maven-respository</localRepository>

3.3 创建maven项目

3.3.1 idea中配置maven环境

在idea的file工具栏中选中File=>otherSettings=>defaultSettings

 3.3.2 创建maven工程

单击File=>Project

 改造默认的web工程结构。

添加三个文件夹

java

test

resources

并且将三个文件夹标记为不同类型的文件夹,在文件夹单击鼠标右键。

 修改web.xml版本号

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> </web-app>

3.3.4 测试maven工程

在idea中配置tomcat

3.4 maven详解

3.4.1 pom文件

POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

POM 中可以指定以下配置:

· 项目依赖

· 插件

· 执行目标

· 项目构建 profile

· 项目版本

· 项目开发者列表

· 相关邮件列表信息

 实战案例:修改之前的传统web项目为maven项目

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <!-- 项目坐标-->
  6. <groupId>com.cloudwise</groupId>
  7. <artifactId>myMaven</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <!-- 标识项目打包的形式是jar还是war,springboot默认就是jar-->
  10. <packaging>war</packaging>
  11. <name>myMaven Maven Webapp</name>
  12. <!-- FIXME change it to the project's website -->
  13. <url>http://www.example.com</url>
  14. <!-- 全局变量-->
  15. <properties>
  16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17. <maven.compiler.source>1.8</maven.compiler.source>
  18. <maven.compiler.target>1.8</maven.compiler.target>
  19. <junit.version>4.9</junit.version>
  20. </properties>
  21. <!-- 引入的依赖jar包-->
  22. <dependencies>
  23. <dependency>
  24. <groupId>junit</groupId>
  25. <artifactId>junit</artifactId>
  26. <version>${junit.version}</version>
  27. <!-- 只参与测试-->
  28. <scope>test</scope>
  29. </dependency>
  30. <!-- fastjsonjar包 -->
  31. <dependency>
  32. <groupId>com.alibaba</groupId>
  33. <artifactId>fastjson</artifactId>
  34. <version>1.2.62</version>
  35. <scope>compile</scope>
  36. </dependency>
  37. <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  38. <dependency>
  39. <groupId>javax.servlet</groupId>
  40. <artifactId>javax.servlet-api</artifactId>
  41. <version>4.0.1</version>
  42. <!-- 运行的时候不用-->
  43. <scope>provided</scope>
  44. </dependency>
  45. <!-- https://mvnrepository.com/artifact/log4j/log4j -->
  46. <dependency>
  47. <groupId>log4j</groupId>
  48. <artifactId>log4j</artifactId>
  49. <version>1.2.17</version>
  50. <scope>compile</scope>
  51. </dependency>
  52. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  53. <dependency>
  54. <groupId>mysql</groupId>
  55. <artifactId>mysql-connector-java</artifactId>
  56. <version>5.1.47</version>
  57. <!-- mysql的驱动载编译时不需要,只有在运行和测试的时候需要-->
  58. <scope>runtime</scope>
  59. </dependency>
  60. <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
  61. <dependency>
  62. <groupId>javax.servlet</groupId>
  63. <artifactId>jstl</artifactId>
  64. <version>1.2</version>
  65. </dependency>
  66. <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
  67. <dependency>
  68. <groupId>cn.hutool</groupId>
  69. <artifactId>hutool-all</artifactId>
  70. <version>5.3.10</version>
  71. </dependency>
  72. <dependency>
  73. <groupId>com.cloudwise.oracle</groupId>
  74. <artifactId>ojdbc8</artifactId>
  75. <version>2.1.1</version>
  76. <scope>runtime</scope>
  77. </dependency>
  78. </dependencies>
  79. <build>
  80. <finalName>myMaven</finalName>
  81. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  82. <plugins>
  83. <plugin>
  84. <artifactId>maven-clean-plugin</artifactId>
  85. <version>3.1.0</version>
  86. </plugin>
  87. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  88. <plugin>
  89. <artifactId>maven-resources-plugin</artifactId>
  90. <version>3.0.2</version>
  91. </plugin>
  92. <plugin>
  93. <artifactId>maven-compiler-plugin</artifactId>
  94. <version>3.8.0</version>
  95. </plugin>
  96. <plugin>
  97. <artifactId>maven-surefire-plugin</artifactId>
  98. <version>2.22.1</version>
  99. </plugin>
  100. <plugin>
  101. <artifactId>maven-war-plugin</artifactId>
  102. <version>3.2.2</version>
  103. </plugin>
  104. <plugin>
  105. <artifactId>maven-install-plugin</artifactId>
  106. <version>2.5.2</version>
  107. </plugin>
  108. <plugin>
  109. <artifactId>maven-deploy-plugin</artifactId>
  110. <version>2.8.2</version>
  111. </plugin>
  112. </plugins>
  113. </pluginManagement>
  114. </build>
  115. </project>

 3.4.2 mavne构建生命周期

clean 清理项目,删除上次编译留下的构建文件

 test ==》package===》install==》deploy

跳过测试

mvn package -Dmaven.test.skip=true

Maven 有以下三个标准的生命周期:

· clean:项目清理的处理

· default(或 build):项目部署的处理

这是 Maven 的主要生命周期,被用于构建应用,包括下面的 23 个阶段:

生命周期阶段

描述

validate(校验)

校验项目是否正确并且所有必要的信息可以完成项目的构建过程。

initialize(初始化)

初始化构建状态,比如设置属性值。

generate-sources(生成源代码)

生成包含在编译阶段中的任何源代码。

process-sources(处理源代码)

处理源代码,比如说,过滤任意值。

generate-resources(生成资源文件)

生成将会包含在项目包中的资源文件。

process-resources (处理资源文件)

复制和处理资源到目标目录,为打包阶段最好准备。

compile(编译)

编译项目的源代码。

process-classes(处理类文件)

处理编译生成的文件,比如说对Java class文件做字节码改善优化。

generate-test-sources(生成测试源代码)

生成包含在编译阶段中的任何测试源代码。

process-test-sources(处理测试源代码)

处理测试源代码,比如说,过滤任意值。

generate-test-resources(生成测试资源文件)

为测试创建资源文件。

process-test-resources(处理测试资源文件)

复制和处理测试资源到目标目录。

test-compile(编译测试源码)

编译测试源代码到测试目标目录.

process-test-classes(处理测试类文件)

处理测试源码编译生成的文件。

test(测试)

使用合适的单元测试框架运行测试(Juint是其中之一)。

prepare-package(准备打包)

在实际打包之前,执行任何的必要的操作为打包做准备。

package(打包)

将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。

pre-integration-test(集成测试前)

在执行集成测试前进行必要的动作。比如说,搭建需要的环境。

integration-test(集成测试)

处理和部署项目到可以运行集成测试环境中。

post-integration-test(集成测试后)

在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。

verify (验证)

运行任意的检查来验证项目包有效且达到质量标准。

install(安装)

安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。

deploy(部署)

将最终的项目包复制到远程仓库中与其他开发者和项目共享。

· site:项目站点文档创建的处理(Maven Site 插件一般用来创建新的报告文档、部署站点等)

 3.4.3 maven仓库

https://mvnrepository.com/

https://search.maven.org/search

3.4.4 maven插件

Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来:

· 创建 jar 文件

· 创建 war 文件

· 编译代码文件

· 代码单元测试

· 创建工程文档

· 创建工程报告

3.4.5 maven依赖范围管理

systemPath一般跟system一起使用

中央仓库中的jar都是免费可以随意下载的,收费的jar在中央仓库没有,不允许下载。

将不免费的jar包打进本地仓库中。

mvn install:install-file -DgroupId=com.cloudwise.oracle -DartifactId=ojdbc8 -Dversion=2.1.1 -Dpackaging=jar -Dfile=D:\ojdbc8.jar

  1. <dependency>
  2. <groupId>com.cloudwise.oracle</groupId>
  3. <artifactId>ojdbc8</artifactId>
  4. <version>2.1.1</version>
  5. <scope>runtime</scope>
  6. </dependency>

3.5 maven父子项目

创建父子项目

步骤一:创建父亲项目

 步骤二,改造父亲项目

删除src目录

 步骤三:创建子项目

好处:

1. 共享公共代码

2. 统一管理jar包

3.6 实战案例

3.6.1 tomcat热部署

为什么使用tomcat热部署?

tomcat部署:将源码编译打包成war包,将war包拷贝到tomcat中的webapps中

tomcat的热部署可以自动完成上面的两个步骤。

步骤一:修改tomcat配置

tomcat默认不允许远程管理,需要修改两个配置文件

1:/usr/local/tomcat8/webapps/manager/META-INF/context.xml

注释掉:<!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"

         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->

2:增加用户名和密码

/usr/local/tomcat8/conf/tomcat-users.xml

<role rolename="manager-gui"/>

         <role rolename="manager-script"/>

         <user username="tomcat" password="tiger" roles="manager-gui, manager-script"/>

步骤二:修改maven工程配置

  1. <plugin>
  2. <groupId>org.apache.tomcat.maven</groupId>
  3. <artifactId>tomcat7-maven-plugin</artifactId>
  4. <configuration>
  5. <port>9090</port>
  6. <path>/xxxx</path>
  7. <url>http://127.0.0.1:9090/manager/text</url>
  8. <username>tomcat</username>
  9. <password>tiger</password>
  10. <!-- 覆盖旧的war包-->
  11. <update>true</update>
  12. </configuration>
  13. </plugin>

步骤三:执行热部署

mvn tomcat7:redeploy

步骤四:测试热部署

“灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。灰度期:灰度发布开始到结束期间的这一段时间,称为灰度期。”

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号