Maven架构项目管理工具

打印 上一主题 下一主题

主题 866|帖子 866|积分 2608

1.1什么是Maven



  • 翻译为“专家”,“老手”
  • Maven是跨平台项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
  • 什么是理想的项目构建?

    • 高度自动化,跨平台,可重用的组件,尺度化的

  • 什么是依赖?为什么要进行依赖管理?

    • 自动下载,同一依赖管理
    • A1.0   依托于  B 2.0  依托于    C3.0



  • 有哪些项目信息

    • 项目名称描述等,开发人员信息,开发者信息等

依赖管理

依赖管理是Maven的核心功能之一。Maven可以自动下载并管理项目所需的第三方依赖包,比如JAR文件。同时,它也支持对自己开发的模块进行管理,类似于引入第三方依赖包一样引用自己的模块。
举个例子,一个项目A依赖于B,而B又依赖于C,那么通过Maven的依赖管理,C将被自动下载,并且能够在项目构建时自动办理依赖关系。
项目信息

Maven不但仅管理代码,还能帮助存储与项目相干的各种信息。
1.2 什么是依赖管理

依赖管理指的是Maven怎样管理项目所需的外部依赖。通过Maven,开发者不必要手动下载和设置这些依赖,它能够自动从远程仓库下载并在本地存储。对于自己开发的模块,Maven也提供了类似的依赖管理功能,可以轻松地引用自己模块的版本。

1.3 什么是项目构建

项目构建是指从编写源代码到编译、测试、打包、摆设的整个过程。在传统的项目构建中,开发者必要手动完成这些步骤,这既繁琐又容易堕落。
传统项目构建



Maven项目构建

Maven将项目构建过程尺度化,可以通过简单的命令完成所有步骤。Maven的构建过程包括:


这种尺度化的构建过程对于团队协作非常有益,避免了每个开发者不同的设置和操纵方式带来的问题。

1.4 Maven的应用场景

Maven在大型团队和复杂项目中发挥着重要作用。开发人员只需按Maven的尺度目录结构进行开发,并提交代码。在测试服务器上,Maven会自动拉代替码并进行构建,完成项目的清算、编译、测试、打包和摆设等工作。

1.5 为什么使用Maven



  • IDE?Eclipse?IDEA?

    • 手工操纵较多,编译、测试、摆设等工作都是独立的,很难一步完成
    • 每个人的IDE设置都不同,很容易就堕落出现本地代码换个地方编译

  • Ant?

    • 没有一个约定的目录结构
    • 必须明确让ant做什么,什么时间做,然后编译,打包
    • 没有生命周期,必须定义目的及其实现的任务序列
    • 没有集成依赖管理

  • Maven?

    • 拥有约定,知道你的代码在哪里,放到哪里去
    • 拥有一个生命周期,比方实行 mvn install 就可以自动实行编译,测试,打包等构建过程
    • 只必要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情
    • 拥有依赖管理,仓库管理

1.6 Maven模型

Maven项目基于**POM(Project Object Model)**模型,它通过一个名为pom.xml的设置文件来定义项目的基本信息、依赖、插件等。这个文件可以看作是Maven项目的核心,所有的构建和依赖关系都通过它进行管理。

2. 初识Maven

2.1 Maven安装

2.1.1 安装预备



2.1.2 Maven安装目录分析

解压Maven后,目录结构如下:



2.1.3 设置Maven环境变量



  • 设置MAVEN_HOME环境变量


  • 升级时只必要下载最新版本,解压缩重新设置MAVEN_HOME环境变量即可


  • 设置MAVEN_OPTS环境变量


  • -Xms128m -Xmx512m


  • 设置用户范围的settings.xml


  • %MAVEN_HOME%/conf/settings.xml 全局的
  • ~/.m2/settings.xml 单个用户的
设置MAVEN_HOME环境变量,把maven的解压后的路径添加为变量值

设置Path环境变量,把 %MAVEN_HOME%\bin 添加到Path的变量值末尾,与前面的内容用 ; 隔开,如图:


设置MAVEN_OPTS运行环境变量大小,(办理大型项目内存溢出的问题)
(找到命令改参数治标不治本)
-Xms128m  -Xmx512m

验证设置是否完成

2.2 Maven的第一个项目

2.2.1按照约定创建Maven项目目录



  • src/main/java —— 存放项目的.java文件
  • src/main/resources —— 存放项目资源文件,如spring, mybatis设置文件
  • src/test/java —— 存放所有测试.java文件,如JUnit测试类
  • src/test/resources —— 测试资源文件
  • target —— 项目输出位置
  • pom.xml

2.2.2.在项目Hello根目录创建pom.xml


  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2.          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.     <groupId>cn.tx.maven</groupId>
  6.     <artifactId>Hello</artifactId>
  7.     <version>0.0.1-SNAPSHOT</version>
  8.     <dependencies>
  9.         <dependency>
  10.             <groupId>junit</groupId>
  11.             <artifactId>junit</artifactId>
  12.             <version>4.9</version>
  13.             <scope>test</scope>
  14.         </dependency>
  15.     </dependencies>
  16. </project>
复制代码
2.2.3 编写Java代码

在src/main/java/cn/tx/maven/目录下创建Hello.java:
  1. package cn.tx.maven;
  2. public class Hello {
  3.     public String sayHello(String name) {
  4.         return "Hello " + name + "!";
  5.     }
  6. }
复制代码
2.2.4 编写单位测试

在src/test/java/cn/tx/maven/目录下创建HelloTest.java:
  1. package cn.tx.maven;
  2. import org.junit.Test;
  3. import static junit.framework.Assert.*;
  4. public class HelloTest {
  5.     @Test
  6.     public void testHello() {
  7.         Hello hello = new Hello();
  8.         String results = hello.sayHello("maven");
  9.         assertEquals("Hello maven!", results);
  10.     }
  11. }
复制代码
2.2.5 使用Maven进行项目构建

在命令行中进入项目根目录,实行以下命令:


  • 打开cmd命令行,进入Hello项目根目录实行 mvn compile命令,检察根目录变化

  • cmd 中继续录入mvn clean命令,然后再次检察根目录变化


  • cmd 中录入 mvn clean compile命令, 检察根目录变化


  • cmd 中录入 mvn clean test命令,检察根目录变化


  • cmd 中录入 mvn clean package命令,检察根目录变化


  • cmd 中录入 mvn clean install 检察仓库会把项目安装到仓库里


2.3 Maven的第二个项目

通过创建第二个项目HelloFriend,了解怎样引用其他项目的依赖。
2.3.1 创建项目目录

创建HelloFriend项目,并按照尺度Maven目录结构进行构造。
2.3.2 创建pom.xml

在HelloFriend的根目录创建pom.xml,并引用Hello项目作为依赖:
  1. <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">
  2.   <modelVersion>4.0.0</modelVersion>
  3.   <groupId>cn.tx.maven</groupId>
  4.   <artifactId>HelloFriend</artifactId>
  5.   <version>0.0.1-SNAPSHOT</version>
  6.   <name>HelloFriend</name>
  7.   
  8.         <dependencies>
  9.                 <dependency>
  10.                         <groupId>junit</groupId>
  11.                         <artifactId>junit</artifactId>
  12.                         <version>4.9</version>
  13.                         <scope>test</scope>
  14.                 </dependency>               
  15.                
  16.                 <dependency>
  17.                         <groupId>cn.tx.maven</groupId>
  18.                         <artifactId>Hello</artifactId>
  19.                         <version>0.0.1-SNAPSHOT</version>
  20.                         <scope>compile</scope>
  21.                 </dependency>               
  22.                
  23.         </dependencies>
  24. </project>
复制代码
2.3.3 编写Java代码

在HelloFriend项目中,引用Hello类进行构建:
  1. package cn.tx.maven;
  2. import cn.tx.maven.Hello;
  3. public class HelloFriend {
  4.         public String sayHelloToFriend(String name){
  5.                
  6.                 Hello hello = new Hello();
  7.                 String str = hello.sayHello(name)+" I am "+this.getMyName();
  8.                 System.out.println(str);
  9.                 return str;
  10.         }
  11.        
  12.         public String getMyName(){
  13.                 return "John";
  14.         }
  15. }
复制代码
2.3.4.创建HelloFriendTest.java文件

在/src/test/java/cn/tx/maven目录下新建测试文件HelloFriendTest.java
  1. package cn.tx.maven;
  2. import static junit.framework.Assert.assertEquals;
  3. import org.junit.Test;
  4. import cn.tx.maven.Hello;
  5. public class HelloFriendTest {
  6.         @Test
  7.         public void tesHelloFriend(){
  8.                
  9.                 HelloFriend helloFriend = new HelloFriend();
  10.                 String results = helloFriend.sayHelloToFriend("zhangsan");
  11.                 assertEquals("Hello zhangsan! I am John",results);               
  12.         }
  13. }
复制代码
2.3.5 测试打包HelloFriend项目

在HelloFriend目录下实行命令mvn package

系统报错提示:Could not find artifact cn.tx.maven:Hello:jar:0.0.1-SNAPSHOT,表现无法找到HelloFriend所依赖的Hello 0.0.1-SNAPSHOT.jar
故此我们必要重新构建第一个项目Hello并安装到数据仓库,在命令行Hello根目录下实行mvn clean install

对Hello项目进行清算并安装后,对HelloFriend项目再次进行打包

可以看到本次打包成功,阐明HelloFriend项目已经可以加载Hello项目所打包的jar包
2.4. Maven仓库设置


2.4.1. Maven仓库概念



         何为Maven仓库?
        用来同一存储所有Maven共享构建的位置就是仓库
         Maven仓库结构
         根据Maven坐标定义每个构建在仓库中唯一存储路径
 groupId/artifactId/version/artifactId-version.packaging
         仓库的分类
        本地仓库
• ~/.m2/repository/ 可修改
• 每个用户只有一个本地仓库
         远程仓库
• 中央仓库:Maven默认的远程仓库
http://repo1.maven.org/maven2
• 私服:是一种特殊的远程仓库,它是架设在局域网内的仓库
2.4.2. Maven本地仓库设置


1. 全局本地仓库(所有操纵系统用户均影响)
%MAVEN_HOME%\conf\settings.xml文件,修改该文件会影响所有使用该Maven的用户的本地仓库,比方:

2. 用户本地仓库(仅影响使用该设置文件的用户或程序)
该文件可以在任意目录,比方:

3. 修改设置文件设置Maven本地仓库(以全局设置为例)
编辑D:\TOOLS\maven\apache-maven-3.5.4\conf\settings.xml文件
找到如下位置:

修改为:

保存退出即可
以上设置表现所有使用该Maven的程序或用户,如未单独设置,则默认加载以上目录的本地库文件;
Ps:课程提供本地库文件为shoprapository.zip,如果遇到打包不成功,jar包无法下载等环境,优先进行本地库设置,避免因网络导致的maven依赖包问题.
2.5. IDEA整合Maven项目


2.5.1. IDEA的Maven全局设置



启动IDEA后找到Settings


        以上设置完成表现在本idea上,所有项目如未对Maven的设置进行单独设置,则默认均使用该Maven版本和本地库设置;
2.5.2. IDEA创建Maven的Java项目


至此Maven的Java项目创建完成

测试Maven的jar包引入

        以上,在IDEA上使用Maven进行Java项目的创建及测试已完成!
        2.5.3 IDEA创建Maven的Java web项目


        设置完毕后会进行web项目的初始化,初始化过程取决于本地库是否已生成及网络环境,推荐使用课程提供的Maven本地库
        如果创建项目速度非常慢,并且在Generating project in Batch mode卡住,则进行全局设置如下:
-DarchetypeCatalog=local

        以上web项目则创建成功,接下来必要进行一些设置来确定web项目可以正常运行

        添加war包的方法:


        设置web服务器

        添加本地tomcat设置

        测试项目运行


        至此,在IDEA上使用Maven设置的Java web工程已经完成设置
2.5.4. IDEA导入既有Maven项目


        以导入刚才的Maven项目的例子做示范:

        导入引入依赖Hello项目的HelloFriend项目,可以看到Hello项目已经被打成jar包引用到HelloFriend的Maven依赖中

2.6. Maven项目视图


        Maven项目视图主要用于检察该maven项目的各项属性,同时也可以进行一些常见的maven的操纵,比如打包,清算,测试等等;



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表