文章目录

  • Maven插件篇
  • 引入
  • clean 插件
  • compile 插件
  • test 插件
  • package 插件
  • install 插件
  • 小结:


学习中产生的痛苦来源于知识的浅薄。

Maven插件篇

引入

maven 是一个项目管理的工具,管理项目到底管理什么东西呢?首先肯定是jar包的管理,maven可以导入依赖。其次就是项目的生命周期的管理,不要被生命周期所吓到,其实不就是编译,测试,打包等。这些东西都是maven通过对应的插件来管理的。我们今天就来了解一下这些插件怎么使用。先学习简单的 clean,compile,test,package,install。

maven插件与maven版本_jar


为了方便演示,我们使用IDEA创建一个maven项目,不会的话,请使用搜索引擎查询。搜索引擎是最好的老师。

创建好的目录:

maven插件与maven版本_jar_02


创建HelloWorld类 (HelloWorld是我们学习的第一步)

package cn.zl;

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

clean 插件

clean,顾名思义清除。清除什么东西呢?清理target目录下的内容,target就是项目编译后的class文件输入文件夹。

命令行指令:mvn clean

clean插件清除前

因为我编译过了,所以目录中有了target文件夹。

maven插件与maven版本_maven_03


项目所在的文件夹也存在 target目录。

maven插件与maven版本_maven插件_04

  1. 在命令行执行 mvn clean
    找到项目所在的目录,打开cmd命令行输出 mvn clean。

    此时查看项目目录,发现target没有了。说明起作用了。
  2. 在idea中执行 mvn clean
    在右边有Maven按钮,点开,然后按照下图点击 clean。

    控制台输出

    查看目录,发现target目录没有了。

    **小结:**为什么会存在这样的功能,你可以想象一下,项目在运行的时候首先都是编译,在下次运行的时候,如果不清楚原来编译的class,文件名不就存在冲突了。两个字周到。我理解的就是这个原因,不服来辩。

compile 插件

compile,中文翻译:编译。这是一个很重要的词语,死记!对于java来说,编译就是将java 文件转成成 class文件。我们在最初学习java的时候编译工具,还记得不?javac(JDK自带的工具,其实JDK还有很多工具,我们通常都忽略了)。我一直觉得compile和javac有千丝万缕的关系,但是目前知识浅薄,还没有醒悟。好了,不哔哔看操作。

我们已经说明了在maven项目中,编译完的class文件是存放在target目录下的。其实,你在IDEA中启动Main方法,也是先进行编译,在执行。

编译前

maven插件与maven版本_maven插件与maven版本_05


maven插件与maven版本_maven插件_06

  1. 在命令行执行 mvn compile

    查看
  2. 在idea中执行 mvn compile
    对哦,提醒一句,在IDEA中,命令执行默认是有循序的,比如compile,默认先执行clean。当然也可以选择跳过。(想知道怎么跳过,自己百度噻)

    查看

test 插件

这个还用翻译吗?测试,测试,测试。首先了解一下什么是单元测试(Junit),这里就不多哔哔了。女朋友等我睡觉呢。

  1. 导入单元测试的依赖。在pom.xml中导入(pom.xml 是maven的灵魂)
<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <!--scope表示测试的范围,不在测试的目录,是无法import这个包的
            不信,可以试一试!-->
            <scope>test</scope>
        </dependency>
    </dependencies>
  1. 在maven的测试目录中编写测试方法。
package cn.zl;

import org.junit.Assert;
import org.junit.Test;

public class ZTests {

    @Test
    public void test1(){
        HelloWorld helloWorld = new HelloWorld();
        String sayHello = helloWorld.sayHello();
        //这里回去比对 sayHello 和 "Hello Maven"。
        Assert.assertEquals("Hello Maven",sayHello);
    }
}
  1. 命令行执行 mvn test
    这里其实 测试已经执行了,但是没有打印测试报告,其实我们还需要的配置一些 test插件的参数。

配置插件参数
注意:这里好像存在版本的问题。关于这个插件的详细信息后续讲,先体验。

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
            </plugin>
        </plugins>
    </build>

在运行一下

maven插件与maven版本_jar_07


4.此时我们在IDEA中运行一下。

maven插件与maven版本_命令行_08

package 插件

package,中文翻译打包,实际就是打包。什么是打包呢,其实就是把一堆class文件压缩成一个jar文件。当然jar 也可以分为:依赖jar 和 可运行jar。什么是依赖jar呢,首先要明确一个思想:组件,也就是编译一些组件,供其他程序要使用,也就是所谓的API。可运行jar,是可以双击图标运行的程序。其实就是指定好Main方法。(Main方法是程序执行的入口)

1.命令行执行 mvn package

maven插件与maven版本_maven_09


效果展示

maven插件与maven版本_jar_10


2. IDEA运行

maven插件与maven版本_命令行_11


控制台信息

maven插件与maven版本_命令行_12


效果展示

maven插件与maven版本_命令行_13


补充:我们可以打包一个可执行jar,玩玩。

鉴于我上面写了一个HelloWorld类,里面包含主方法,我们就那这个来打包。这里我们需要借助 maven-shade-plguin 插件。

第一步:导入插件

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-shade-plugin</artifactId>
      <version>1.2.1</version>
      <executions>
        <execution>
         <phase>package</phase>
            <goals>
               <goal>shade</goal>
                  </goals>
                     <configuration>
                       <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>cn.zl.HelloWorld</mainClass>
                        </transformer>
                    </transformers>
                  </configuration>
                </execution>
         </executions>
   </plugin>

先体验,这个时候会出现两个jar包。

maven插件与maven版本_命令行_14


上面是原始的jar包,也就是不包含Main方法的jar包,无法执行的那种。

下面是可以先的jar包。我们可以jar包中的META-INF/MANIFEST.MF 中看到它包含以下信息:

maven插件与maven版本_命令行_15


运行一把

maven插件与maven版本_maven插件_16


成功完美。是不是很好玩。

install 插件

install,中文翻译安装。那到底安装到哪里呢?maven 在本地是有自己的仓库。于是乎,就是把我们的项目安装到本地的仓库。这个时候,在本地编写其他项目的时候,就可以通过groupId 和artifactId 来导入这个依赖jar。

首先我们去仓库看一下

你们的仓库地址,在全局的setting.xml 文件中有。自己百度看下呗。

maven插件与maven版本_命令行_17

  1. 命令行执行mvn install

    查看仓库
    可以不是我偷偷创建的啊。
  2. 在IDEA中运行。

    控制台信息

    查看仓库
    存在了。

小结:

细心的同学,在学习的过程中,会产生各种各样的疑惑。好事,绝对的好事。正是因为我的好奇心,才会激励我们对技术学习的渴望。先跑起来,后续我们一起来学习更加详细的知识。大神无非就是懂得多,想得多,了解的多,实际行动多。