• Maven学习笔记


    《项目管理利器——maven 》学习笔记

    Maven的安装

    Maven下载地址
    选择 apache-maven-3.3.9-bin.zip
    下载后解压。
    配置环境变量:

    1. 新建环境变量M2_HOME,值为maven解压的地址,例如:D:mavenapache-maven-3.3.9
    2. 在Path变量的值后面添加;%M2_HOME%in;
      验证配置成功:win+r cmd 输入mvn -v 如果能出现相关信息则成功。

    maven项目目录结构:

    src
    -main
    	-java
    		-package(自定义的包)
    -test
    	-java
    		-package
    -resources(存放一些资源文件)
    

    手工编写第一个maven项目:

    创建文件夹及编写文件

    maven01(project name)
    	-src
    		-main
    			-java
    				-com/maven/imooc/model/HelloWorld.java
    		-test
    			-java
    				-com/maven/imooc/model/HelloWorldTest.java
    	-pom.xml
    

    HelloWorld.java

    package com.imooc.maven01.model;
    
    public class HelloWorld {
    	public String sayHello() {
    		return "Hello World!";
    	}
    }
    

    HelloWorldTest.java

    package com.imooc.maven01.model;
    
    import org.junit.*;
    import org.junit.Assert.*;
    
    public class HelloWorldTest {
    	@Test
    	public void testHello() {
    		Assert.assertEquals("Hello World!", new HelloWorld().sayHello());
    	}
    }
    

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
    	
    	<!-- 包名 -->
    	<groupId>com.imooc.maven01</groupId>
    	<!-- 模块名 建议使用项目名 -->
    	<artifactId>maven01-model</artifactId>
    	<!-- 版本 -->
    	<version>0.0.1-SNAPSHOT</version>
    	
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.10</version>
    		</dependency>
    	</dependencies>
       
    </project>
    

    在cmd中项目目录下运行mvn compile 看到BUILD SUCCESS即运行成功 (maven下载慢的话可以看这篇博客解决:传送门
    然后运行mvn test 看到BUILD SUCCESS即运行成功
    会在项目根目录下生成文件夹target
    运行mvn package


    maven常用构建命令

    1. mvn -v 查看maven版本。
    2. mvn compile 编译。
    3. mvn test 测试。
    4. mvn package 打包。
    5. mvn clean 清除maven生成的target目录。
    6. mvn install 将生成的jar安装到本地仓库中。

    构建第二个maven项目

    Speak.java

    package com.imooc.maven02.util;
    
    import com.imooc.maven01.model.HelloWorld;
    
    public class Speak {
    	public String sayHi() {
    		return new HelloWorld().sayHello();
    	}
    }
    

    SpeakTest.java

    package com.imooc.maven02.util;
    
    import org.junit.*;
    import org.junit.Assert.*;
    
    public class SpeakTest {
    	@Test
    	public void testSayHi() {
    		Assert.assertEquals("Hello World!", new Speak().sayHi());
    	}
    }
    

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
    	
    	<groupId>com.imooc.maven02</groupId>
    	<artifactId>maven02-model02</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.10</version>
    		</dependency>
    		<dependency>
    			<groupId>com.imooc.maven01</groupId>
    			<artifactId>maven01-model</artifactId>
    			<version>0.0.1-SNAPSHOT</version>
    		</dependency>
    	</dependencies>
       
    </project>
    

    在maven01项目目录下执行mvn install 将该项目发布到本地仓库中
    然后在maven02项目下执行mvn compile。
    pom.xml中的依赖会在本地仓库中查找,如果没有就去网上仓库中心下载到本地仓库。


    maven自动创建目录

    在项目根目录下打开cmd窗口(shift+右键—>cmd)

    1. 输入archetype:generate,然后按照提示进行选择(会卡在奇怪的地方,运行mvn archetype:generate -DarchetypeCatalog=internal可以解决)
      出现choose a number or apply filter,貌似前面是一些模板,直接回车。
    2. archetype:generate -DgourpId=组织名,公司网址的反写+项目名称
      -DartifactId=项目名-模块名
      -Dversion=版本号
      -Dpackage=代码所在的包名
      mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.imooc.maven04 -DartifactId=maven04-demo -Dversion=1.0.0-SNAPSHOT -Dpackage=com.imooc.maven04.demo -DarchetypeCatalog=internal

    Maven中的坐标和仓库

    构造通过坐标作为其唯一标识,如

    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
    

    更改本地仓库位置:
    打开...apache-maven-3.3.9confsettings.xml
    找到<settings>标签,中间添加<localRepository>要存放本地仓库的位置(例如D:/repo)</localRepository>


    用Eclipse创建Maven项目

    在Eclipse安装Maven(虽然Eclipse自带maven插件的。

    右键new—>maven project,选择quickstart
    运行:在pom.xml右键run as—>Maven build...
    Goals处输入:compile 点击run


    Maven生命周期

    Maven定义了三套生命周期,三套生命周期之间相互独立

    • clean生命周期
    pre-clean:执行清理前的工作;
    clean:清理上一次构建生成的所有文件;
    post-clean:执行清理后的工作
    
    • default生命周期
    validate
    generate-sources
    process-sources
    generate-resources
    process-resources 复制并处理资源文件,至目标目录,准备打包。
    compile 编译项目的源代码。
    process-classes
    generate-test-sources 
    process-test-sources 
    generate-test-resources
    process-test-resources 复制并处理资源文件,至目标测试目录。
    test-compile 编译测试源代码。
    process-test-classes
    test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
    prepare-package
    package 接受编译好的代码,打包成可发布的格式,如 JAR 。
    pre-integration-test
    integration-test
    post-integration-test
    verify
    install 将包安装至本地仓库,以让其它项目依赖。
    deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。
    
    • site生命周期
    pre-site 执行一些需要在生成站点文档之前完成的工作
    site    生成项目的站点文档
    post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
    site-deploy 将生成的站点文档部署到特定的服务器上
    

    运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。

    Maven插件

    Maven的核心分发包只有不到3MB的大小,Maven会在需要的时候下载并使用插件,对于插件本身,为了能够复用代码,它往往能够完成多个任务。Maven的生命周期与插件相互绑定,用以完成实际的构建任务。具体而言是生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务。

    <build>
    	<plugins>
    		<plugin>
    			<groupId>org.apache.maven.plugins</groupId>
    			<artifactId>maven-source-plugin</artifactId>
    			<version>2.4</version>
    			<executions>
    				<execution>
    					<phase>package</phase> <!--绑定到的目标阶段-->
    					<goals>
    						<goal>jar-no-fork</goal> <!--目标方式,无分支-->
    					</goals>
    				</execution>
    			</executions>
    			<configuration>
    				<outputDirectory>/absolute/path/to/the/output/directory</outputDirectory> <!--输出路径-->
    				<finalName>filename-of-generated-jar-file</finalName>
    				<attach>false</attach>
    			</configuration>
    		</plugin>
    	</plugins>
    </build>
    

    Maven中pom.xml的解析

    1.根元素 project
    2.modelVersion 固定版本4.0.0 指定了当前pom的版本
    3.坐标 <groupId>,<artifactId>,<version>,<packageing>
    	groupId 反写的公司网址+项目名
    	artifactId 项目名+模块名
    	version 版本号 第一个0表示大版本号,第二个0表示大版本号,第三个0表示大版本号。如:0.0.1snapshot
    	(snapshot 快照/ alpha 内部测试/ beta 公测/ Release稳定/ GA正式发布)
    	packaging 打包方式 默认是jar
    4.name :项目描述名
    	url:项目的地址
    	description:项目描述
    	developers:开发人员列表
    	licenses:许可证
    	organization:组织信息
    5.dependencies列表
    <scope>依赖范围:
     compile:默认范围,编译测试运行都有效
     provided:在编译和测试时有效
     runtime:在测试和运行时有效
     test:只在测试时有效,典型的是Junit
     system:在编译和测试时有效,与本机系统关联,可移植性差
     import:导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置
    <optional>:设置依赖是否可选 默认FALSE
    <exclusions>:排除依赖传递列表,例如A依赖B,B依赖C,那么在项目A中会导入B和C,但是只想导入B,则可以在这里添加C的坐标,使得C不被导入
    6.dependencyManagement依赖管理,仅仅启到定义的作用,用于定义parent,子模块继承。
    7.build 构建行为提供相应的支持
    plugins插件列表
    8.<parent>
    <modules> 可以指定多个模块一起编译
    	<module></module>
    	<module></module>
    </modules>
    

    Maven依赖冲突

    不同版本的构件
    1.短路优先
    2.先声明先优先,如果路径长度相同,则谁先声明,先解析谁


    使用maven构建web项目

    新建Maven项目,在Filter处选择webapp
    配置pom.xml加入Servlet
    配置jetty或者Tomcat服务器

    <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/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.imooc.webdemo</groupId>
    	<artifactId>webdemo</artifactId>
    	<packaging>war</packaging>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>webdemo Maven Webapp</name>
    	<url>http://maven.apache.org</url>
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.10</version>
    			<scope>test</scope>
    		</dependency>
    
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>javax.servlet-api</artifactId>
    			<version>3.0.1</version>
    			<scope>provided</scope>
    		</dependency>
    	</dependencies>
    	<build>
    		<finalName>webdemo</finalName>
    		<plugins>
    			<plugin>
    				<!-- <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> 
    					<version>9.4.1.v20170120</version> -->
    				<groupId>org.apache.tomcat.maven</groupId>
    				<artifactId>tomcat7-maven-plugin</artifactId>
    				<version>2.2</version>
    				<executions>
    					<execution>
    						<!-- 在打包成功后运行服务器 -->
    						<phase>package</phase>
    						<goals>
    							<goal>run</goal>
    						</goals>
    					</execution>
    				</executions>
    			</plugin>
    		</plugins>
    	</build>
    </project>
    
    

    学习感悟:简单的了解了Maven的用途和使用方法。体会到了用Maven来构建项目的方便之处。

  • 相关阅读:
    css 基线与行高
    requests超时
    小记--------Ambari2.7.4集成Kylin3.0
    记一次--------HDP3.1 spark创建表hive读不到,hive创建表spark读不到
    记一次-------- sqoop同步mysql到hive 执行太慢
    记一次--------hive创建表comment中文乱码解决
    .Net Core学习之路-跳坑(一)
    NGINX、HAProxy和Traefik负载均衡能力对比
    idea 一键启动多个微服务项目
    vuedraggable自由拖拽
  • 原文地址:https://www.cnblogs.com/wenruo/p/6376306.html
Copyright © 2020-2023  润新知