• Maven的初步使用


    这里通过一个例子来说明如何使用Maven。

    我的工作空间是F:/study/workspace。

    在工作空间下新建工程maven_ch01,目录结构如下:

    maven_ch01

    -------------src

    -----------------main

    ------------------------java

    -----------------test

    ------------------------java

    -------------pom.xml

    这种结构式Maven推荐的工程结构。

    在maven_ch01/src/main/java下新建Java文件HelloMaven.java,文件在包com.purple_river.itat.maven下。

    就一个简单的sayHello方法,如下:

    package com.purple_river.itat.maven;
    
    public class HelloMaven {
    	public String sayHello(String name) {
    		return "Hello:" + name;
    	}
    }
    

     在src/test/java下建立与src/main/java下相同的包com.purple_river.iata.maven,并新建TestHelloMaven.java。

    代码如下:

    package com.purple_river.itat.maven;
    
    import org.junit.*;
    import static org.junit.Assert.*;
    
    public class TestHelloMaven {
    	
    	@Test
    	public void testSayHello() {
    		HelloMaven hm = new HelloMaven();
    		String result = hm.sayHello("maven");
    		assertEquals(result,"Hello:maven");
    	}
    }
    

     如你所见,这个测试类中有一个测试方法,就是测试我们在src/main/java下新建的HelloMaven类的sayHello方法。

    可能你也发现了,测试类TestHelloMaven是需要junit.jar的,但是我们的工程中病没有,那么我们怎么运行呢?

    刚刚忘了说pom.xml文件的内容,pom.xml文件的内容如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    	xmlns:xsi="htp://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">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.purple_river.itat.maven</groupId>
    	<artifactId>maven_ch01</artifactId>
    	<version>0.0.1-SWAPSHOT</version>
    	
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>	
    			<version>4.8</version>
    		</dependency>
    	</dependencies>
    </project>	
    

     pom.xml文件基本节点介绍:
    <project>:文件的根节点.
    <modelversion>:pom.xml使用的对象模型版本.
    <groupId>:创建项目的组织或团体的唯一Id.
    <artifactId>:项目的唯一Id,可视为项目名.
    <packaging>:打包物的扩展名,一般有JAR,WAR,EAR等
    <version>:产品的版本号.
    <name>:项目的显示名,常用于Maven生成的文档。
    <url>:组织的站点,常用于Maven生成的文档。
    <description>:项目的描述,常用于Maven生成的文档。

    <dependencies>节点定义工程中的依赖,一个<dependency>标签定义一个依赖,比如上面的<dependecies>节点定义我们工程使用了junit,使用的junit版本是4.8。

    下面使用mvn compile命令来编译java源文件:

    1.在cmd中将位置切换到F:studyworkspacemaven_ch01>;

    2.输入mvn compile命令;

    看到没有?maven会自动下载它所需的依赖文件,最后看到BUILD SUCCESS。

    回到工程maven_ch01下,会发现生成了一个target目录。如下:

    可以看到已经变异了HelloMaven类。

    到我们自定义的本地仓库看看,Maven所需的文件都下载在这里,如图:

    我们工程所需的junit也下载在这里

    Ok,咱们在编译一次看看Maven还会不会从网络下载所依赖的文件呢

    看到没有,这次Maven并没有从网络下载依赖的文件了吧!只有在第一次编译的时候才会下载它依赖的文件,下载到本地后再次运行就会使用本地仓库中的依赖文件。

    使用mvn test命令还运行单元测试。如图:

    此时target目录中多生成了3个目录,如下图:

    test-classes:存放编译的测试类

    surefire-reports:存放测试报告。包括成功的和失败的详细信息。

    将测试类修改一下:

    package com.purple_river.itat.maven;
    
    import org.junit.*;
    import static org.junit.Assert.*;
    
    public class TestHelloMaven {
    	
    	@Test
    	public void testSayHello() {
    		HelloMaven hm = new HelloMaven();
    		String result = hm.sayHello("maven");
    		assertEquals(result,"Hello:maven1");
    	}
    }
    

     将assertEquals(result,"Hello:maven")改成了assertEquals(result,"Hello:maven1"),那么运行测试是会失败的。

    重新只需mvn test命令来执行测试:

    首先呢,命令行中显示运行的结果是失败的。我们到测试报告中看看。

    看到没有,maven记录了详细的错误信息。

    使用mvn package命令打包。

    如图:

    在target目录中生成了maven_ch01_0.0.1_SWAPSHOT.jar,如图:

    在实际开发中,可能是分模块开发,那每个模块之间的依赖呢?

    新建工程maven_ch02,与maven_ch01下有一个HelloMaven02.java文件,

    代码如下:

    package com.purple_river.itat.maven;
    
    public class HelloMaven02 {
    	public static void main(String[] args) {
    		HelloMaven hm = new HelloMaven();
    		String str = hm.sayHello("maven");
    		System.out.println(str);
    	}
    }
    

     这个文件中要使用maven_ch01中的HelloMaven类,那怎么使用maven来管理依赖呢?

    maven_ch02下的pom.xml文件如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    	xmlns:xsi="htp://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">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.purple_river.itat.maven</groupId>
    	<artifactId>maven_ch02</artifactId>
    	<version>0.0.1-SWAPSHOT</version>
    	
    	<dependencies>
    		<dependency>
    			<groupId>com.purple_river.itat.maven</groupId>
    			<artifactId>maven_ch01</artifactId>	
    			<version>0.0.1-SWAPSHOT</version>
    		</dependency>
    	</dependencies>
    </project>	
    

     关键看<dependencies/>标签,这里定义的就是对maven_ch01的依赖。groupId,artifactId,version都是在maven_ch01中的pom.xml中定义的。

    在cmd中切换到maven_ch02,执行mvn compile命令,如图:

    看到上面的Downloading:http://repo.maven.apache.org/maven2/com/purple_river/itat/maven/maven_ch01/0.0.1_SWAPSHOT/maven_ch01-0.0.1-SWAPSHOT.pom和Downloading:http://repo.maven.apache.org/maven2/com/purple_river/itat/maven/maven_ch01/0.0.1_SWAPSHOT/maven_ch01-0.0.1-SWAPSHOT.jar这2行了吗?因为我们在maven_ch02的pom.xml中定义了对maven_ch01的依赖,那么在执行命令时maven会从仓库去找依赖的文件,但是很显然我们的本地仓库中是没有maven_ch01-0.0.1-SWAPSHOT.pom和maven_ch01-0.0.1-SWAPSHOT.jar的,所以最后构建就失败了。

    那应该怎么做才能让maven_ch02编译成功呢?

    切换到maven_ch01,然后执行maven install命令,如图:

    到我们的本地仓库,你会发现maven已经帮我们生成了maven_ch01-0.0.1-SWAPSHOT.jar和maven_ch01-0.0.01-SWAPSHOP.jar,如图:

    Ok,再次切换到maven_ch02,并执行mvn compile命令,如图:

    看到没有,这次就编译成功了。

    maven的install命令真是一个牛逼的命令。

  • 相关阅读:
    居中
    redis之列表操作及在django中操作等相关内容-124
    模型类序列化器ModelSerializer的使用等相关内容-84
    序列化类Serializer的基础使用等相关内容-83
    redis的基础使用等相关内容-123
    django框架前后端混合项目之子评论、后台管理页面富文本编辑器、修改头像、修改密码等相关内容-81
    vue框架前后端分离项目之短信验证码、登录、注册接口及前端登陆注册功能等相关内容-122
    web开发模式及drf的介绍等相关内容-82
    django框架前后端混合项目之侧边栏及点赞点踩功能等相关内容-80
    django框架前后端混合项目之首页轮播图、主页、后台管理、头像显示等相关内容-79
  • 原文地址:https://www.cnblogs.com/luckystar2010/p/3439119.html
Copyright © 2020-2023  润新知