• Maven笔记


    Maven是跨平台的项目管理工具。主要服务于基于JAVA平台的项目构建依赖管理项目信息管理

    项目构建:清理-->编译-->测试-->报告-->打包-->部署

    Maven模型

    Maven的安装

    1. 检查jdk安装的情况(要1.6版本):Echo %JAVA_HOME%           Java -version

    2. 对apache-maven-3.0.3-bin.zip进行解压缩,例如解压到如下目录(解压目录最好不要有中文字)

    3. 设置系统环境变量,MAVEN_HOME

    4. 设置环境变量Path,将%MAVEN_HOME%in加入Path中,一定要注意要用分号;与其他值隔开

    5. 验证安装是否成功,打开cmd窗口,敲入mvn –v 查看;

    最后配置仓库地址和复制配置文件。

    Maven的约束 :

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

    第一个Maven程序:

    第一步. 首先建立MavenHelloWorld项目同时建立Maven约定的目录结构
    
    MavenHelloWorld
         src
             main
                 java
                 resources(暂时省略)
         test
                 java
                 resources(暂时省略)
         pom.xml
    
    第二步:在src/main/java/cn/itcast/maven目录下新建文件Hello.java
    
    package cn.itcast.maven;
    
    public class HelloWorld {
        public String sayHello(String name){
            return "Hello World :" + name + "!";
        }
    }
    
    第三步:在/src/test/java/cn/itcast/maven目录下新建测试文件HelloTest.java
    
    package cn.itcast.maven;
    
    import org.junit.Test;
    import static junit.framework.Assert.*;
    
    public class HelloTest {
    
        @Test
        public void testHello(){
            
            Hello hello = new Hello();
            String results = hello.sayHello("maven");
            assertEquals("Hello maven!",results);        
    
        }
        
    }
    
    第四步:在项目MavenHelloWorld根目录建立pom.xml
    
    <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">
      <!-- 版本:4.0.0 -->
      <modelVersion>4.0.0</modelVersion>
      <!-- 组织名称:暂时使用 组织名称+项目名称 作为组织名称 -->
      <!-- 组织名称:实际名称 按照访问路径规范设置,通常以功能作为名称:eg: junit spring -->
      <groupId>cn.itcast.maven</groupId>
      <!-- 项目名称 -->
      <artifactId>HelloWorld</artifactId>
      <!-- 当前项目版本号:同一个项目开发过程中可以发布多个版本,此处标示0.0.1版 -->
      <!-- 当前项目版本号:每个工程发布后可以发布多个版本,依赖时调取不同的版本,使用不同的版本号 -->
      <version>0.0.1</version>
      <!-- 名称:可省略 -->
      <name>Hello</name>
      
      <!-- 依赖关系 -->
        <dependencies>
            <!-- 依赖设置 -->
            <dependency>
                <!-- 依赖组织名称 -->
                <groupId>junit</groupId>
                <!-- 依赖项目名称 -->
                <artifactId>junit</artifactId>
                <!-- 依赖版本名称 -->
                <version>4.9</version>
                <!-- 依赖范围:test包下依赖该设置 -->
                <scope>test</scope>
            </dependency>        
            
        </dependencies>
    </project>
    
    
    第五步:
    
    a)打开cmd命令行,进入Hello项目根目录(包含有pom.xml文件的目录)
    b)执行 mvn compile命令
        执行完毕后,生成了maven工程编译完成后字节码文件的生成目录target
    c)cmd 中继续录入mvn clean命令
        执行完毕后,字节码生成目录被删除
    d)cmd 中录入 mvn clean test命令
        执行完毕后,字节码生成目录中生成了被测试类与测试类的编译字节码和测试执行过程日志与详细报告
    e)cmd 中录入 mvn clean compile命令
        组合指令,先执行clean,再执行compile,通常应用于上线前执行,清除测试类
    f)cmd 中录入 mvn clean test命令
        组合指令,先执行clean,再执行test,通常应用于测试环节
    g)cmd 中录入 mvn clean package命令
        组合指令,先执行clean,再执行package,将项目打包,通常应用于发布前
        执行过程:
            清理————清空环境
            编译————编译源码
            测试————测试源码
            打包————将编译的非测试类打包
    h)cmd 中录入 mvn clean install 查看仓库,当前项目被发布到仓库中
        组合指令,先执行clean,再执行install,将项目打包,通常应用于发布前
        执行过程:
            清理————清空环境
            编译————编译源码
            测试————测试源码
            打包————将编译的非测试类打包
            部署————将打好的包发布到资源仓库中
    -----------------------------------------------------------------
    错误范例:
    说明:MAVEN 命令输入错误,命令名称显示在[ERROR] Unknown lifecycle phase "compoile"
    引号中的内容为输入错误的名称
    [ERROR] Unknown lifecycle phase "compoile". You must specify a valid lifecycle p
    hase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin
    -artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validat
    e, initialize, generate-sources, process-sources, generate-resources, process-re
    sources, compile, process-classes, generate-test-sources, process-test-sources,
    generate-test-resources, process-test-resources, test-compile, process-test-clas
    ses, test, prepare-package, package, pre-integration-test, integration-test, pos
    t-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-s
    ite, site, post-site, site-deploy. -> [Help 1]
    View Code

    第二个Maven程序:

    第六步:新建第二个项目模块HelloFriend目录及约定的目录结构
    
    HelloFriend
         src
             main
                 java
                 resources(暂时省略)
         test
                 java
                 resources(暂时省略)
         pom.xml
    
    第七步:在项目HelloFriend根目录建立pom.xml
    <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>cn.itcast.maven</groupId>
      <artifactId>HelloFriend</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>HelloFriend</name>
      
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.9</version>
                <scope>test</scope>
            </dependency>        
            
            <dependency>
                <groupId>itcast</groupId>
                <artifactId>HelloWorld</artifactId>
                <version>0.0.1</version>
                <scope>compile</scope>
            </dependency>        
        </dependencies>
    </project>
    
    第八步:在src/main/java/cn/itcast/maven目录下新建文件HelloFriend.java
    
    package cn.itcast.maven;
    
    import cn.itcast.maven.HelloWorld;
    
    public class HelloFriend {
    
        public String sayHelloToFriend(String name){
            HelloWorld hw = new HelloWorld();
            String str = hw.sayHello(name)+" I am "+this.getMyName();
            System.out.println(str);
            return str;
        }
        
        public String getMyName(){
            return "MAVEN";
        }
    
    }
    
    第九步:在/src/test/java/cn/itcast/maven目录下新建测试文件HelloFriendTest.java
    package cn.itcast.maven;
    
    import static junit.framework.Assert.assertEquals;
    
    import org.junit.Test;
    
    import cn.itcast.maven.Hello;
    
    
    public class HelloFriendTest {
        @Test
        public void tesHelloFriend(){
            HelloFriend helloFriend = new HelloFriend();
            String results = helloFriend.sayHelloToFriend("Jock");
            assertEquals("Hello World Jock! I am MAVEN",results);        
        }
    }
    
    第十步:在HelloFriend目录下执行命令mvn package
    
    系统报错说没有找到依赖
    
    第十一步:需要重新构建HelloWorkd第一个项目并安装到数据仓库,在命令行HelloWorkd根目录下执行mvn clean install
    
    第十二步:重新在HelloFriend目录下执行命令mvn package
    
    成功
    View Code

     依赖配置:

    依赖声明主要包含如下元素:
    
        <dependencies>
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.10</version>
                <scope>test</scope>
            </dependency>    
            
        </dependencies>
    
    其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:
    
    1.compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
    2.test:测试依赖范围。只对于测试classpath有效
    3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
    4.runtime:运行时提供。例如:jdbc驱动
    
    传递性依赖原则:
    
    A-->B
    A-->C
    1.路径最近者优先
    2.路径相同,第一声明者优先
    
    注意:
    1.dependencyManagement中定义的依赖子module不会共享
    2.dependencies中定义的依赖子module可以共享
    
    可选依赖不被传递
    
    依赖优化:mvn dependency:list
    View Code

    依赖范围:

    依赖范围对传递依赖的影响:

  • 相关阅读:
    TP生成二维码插件
    day23 常用模块(中)
    day22 作业
    day22 常用模块(上)
    day21 模块与包+软件开发目录规范
    day20 作业
    day20 函数收尾+面向过程+模块
    day19 作业
    day19 生成器+函数递归
    day18 作业
  • 原文地址:https://www.cnblogs.com/java-oracle/p/7826462.html
Copyright © 2020-2023  润新知