• maven完整学习笔记(1)--- 基本概念及基础命令


    前言

    之前工作中和学习中一直在使用maven,并且所掌握完全能够满足工作要求,不过从来没有完整的学习过maven,今天是个开头,希望利用业余时间完整的学习maven

    Maven安装相关

    maven的windows安装很简单,https://maven.apache.org/download.cgi下载对应的包,解压后,添加环境变量,重启PC即可;

    安装后maven的目录如下:

    bin:下面放置了maven运行的脚本,执行mvn命令时,实际上就是调用了这些脚本;脚本中最后指定了调用java命令

    boot:下面只有一个jar包plexus-classworlds-2.5.2.jar,该jar包包含了功能丰富的类加载器

    conf:下面放置maven配置文件,最重要的就是settings文件;PS:PC机用户名下有个.m2目录,下面也有settings文件,这两个文件的区别是:

               安装目录下的settings文件是全局的,而.m2下的是基于用户的,适用多用户场景

    lib:放置maven运行时依赖的java类库

    maven坐标

    maven坐标是为了区分中心仓或者私服中不同构件引入的,由如下几个部分构成:

    groupId:构件组ID,一般为公司或者组织名,例如com.alibaba

    artifactId:  表示maven项目名称,推荐使用maven项目名称

    version:版本号

    packaging:打包方式,我目前见过的有:pom、maven-plugin、war、jar、ear;不指定默认为jar

    classifier:不是很常用,用来定义构件的附属属性。如TestNG,主构件是基于jdk1.4平台的,并且又提供了一个基于jdk1.5平台的附属构件

    maven简单应用

    maven标准目录结构:

    工程hello-world结构如下:

    1、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/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.bale.test</groupId>
        <artifactId>hello-world</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
        
    </project>

    2、主类HelloWorld.java

    public class HelloWorld {
    
        public String sayHello() {
            return "Hello Maven";
        }
    
        public static void main(String[] args) {
            System.out.println(new HelloWorld().sayHello());
        }
    }

    3、测试类HelloWorldTest.java

    import org.junit.Test;
    
    public class HelloWorldTest {
    
        @Test
        public void testSayHello() {
            HelloWorld helloWorld = new HelloWorld();
            helloWorld.sayHello();
        }
    }

    mvn clean compile

    只编译maven项目,可以看到,先执行clean,清理target目录=> 编译资源文件(当然这个例子没有)=> 编译源码 => 将字节码文件放到classpath中

    mvn clean test

    该命令执行单元测试,可以看出执行顺序为:

    先执行clean,清理target目录=> 编译资源文件(这个例子没有)=> 编译源码 => 将字节码文件放到classpath中 => 编译test资源(这个例子没有)=> 编译测试代码 => 将字节码文件放到classpath中 => 生成单元测试报告

    这里可以注意到的细节是:业务代码和测试代码有各自的classpath

    mvn clean package

    该命令用来打包该项目,指定顺序和执行mvn clean test一致,只不过在最后增加了一步:打包

    mvn clean install

    该命令用来打包该项目并且将生成的包安装到本地仓库

    mvn clean deploy

    该命令用来打包该项目并且将生成的包安装到本地仓库以及中心仓或者私服

    生成可执行jar包

    前面生成的jar包MANIFEST.MF文件中无主类信息,因此无法直接执行,可以通过maven-shade-plugin插件来生成可执行jar包

    修改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/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.bale.test</groupId>
        <artifactId>hello-world</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.1.1</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <transformers>
                                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                        <mainClass>HelloWorld</mainClass>
                                    </transformer>
                                </transformers>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
        
    </project>

    编译后字节执行jar包:

  • 相关阅读:
    项目依赖库列表文件requirements.txt生成和使用
    pymysql执行sql语句无效问题
    Prometheus
    关于在安装wampserver出现“由于找不到msvcr110.dll”的问题的解决办法
    安装centos8和Window10出现的一些问题和解决方法
    LeetCode833题:字符串中的查找与替换
    Pycharm中github的使用(只有链接供自己学习使用)
    机器学习《西瓜书》的学习笔记——机器学习使用的领域
    机器学习中数理统计与参数估计的相关基础概念
    怎样在Anaconda中的某一个环境中安装Python的相关包(pypyodbc)
  • 原文地址:https://www.cnblogs.com/sniffs/p/12705356.html
Copyright © 2020-2023  润新知