• maven插件exec-maven-plugin、maven-antrun-plugin使用详解



    前言

    在使用maven构建项目时,有时我们可能需要执行一些系统命令来协助完成。这个时候就可以使用exec-maven-plugin和maven-antrun-plugin这两个插件。
    exec-maven-plugin的主要功能类似于一个后台控制台,我们在控制台执行的命令,都可以借助它来完成。
    maven-antrun-plugin的主要功能是执行一些ant任务,在maven还没诞生的时候Java代码主要编译工具是ant,因此为了要兼容老的ant编译,使用maven-antrun-plugin就能完成。


    一、exec-maven-plugin使用

    exec-maven-plugin有两个执行目标,分别是exec和java
    如果要执行java,配置如下
    在pom.xml中加入类似下面的配置:

    exec:java的使用

    <plugin>
        <groupId>org.codehaus.mojogroupId>
        <artifactId>exec-maven-pluginartifactId>
        <version>3.1.1version>
        <executions>
            <execution>
                <goals>
                    <goal>javagoal>
                goals>
                <phase>testphase>
            execution>
        executions>
        <configuration>
            <includeProjectDependencies>trueincludeProjectDependencies>
            <includePluginDependencies>trueincludePluginDependencies>
            <executableDependency>
                <groupId>commons-langgroupId>
                <artifactId>commons-langartifactId>
            executableDependency>
            <mainClass>com.example.testmvnpkgexespringboot.TestMvnPkgExeSpringbootApplicationmainClass>
            <arguments>
                <argument>1argument>
                <argument>2argument>
            arguments>
            <systemProperties>
                <systemProperty>
                    <key>passwordkey>
                    <value>123456value>
                systemProperty>
            systemProperties>
        configuration>
        <dependencies>
            <dependency>
                <groupId>commons-langgroupId>
                <artifactId>commons-langartifactId>
                <version>2.6version>
                <type>jartype>
            dependency>
        dependencies>
    
    plugin>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    上面这段配置是我们启动一个Java程序。同样版本号3.0.0是可以省略的,如果省略,maven会自动去寻找合适的版本。
    在executions标签中我们可以添加多个execution用来执行多个任务。标签的解释如下:

    id

    表示任务的唯一标识,可以自定义

    goals

    goal可取值:exec/java/help

    phase

    maven的生命周期段

    configuration

    详细的配置

    • includeProjectDependencies
      是否包含项目中的依赖
    • includePluginDependencies
      是否包含插件的依赖
    • executableDependency
      当执行Java程序时的具体依赖,这些依赖包需要添加后后面的dependencies标签中
    • mainClass
      java程序的执行类,这个类必须包含启动的main方法
    • arguments
      传递的参数
    • systemProperties
      执行Java程序时可以设置的系统变量
    • dependencies
      运行时的依赖包

    我们可以使用Java打包命令来执行上面配置:

    mvn clean -DskipTests package
    
    • 1

    exec:exec的使用

    除了执行Java程序,exec-maven-plugin还可以执行其他系统命令,配置如下:

    <plugin>
        <groupId>org.codehaus.mojogroupId>
        <artifactId>exec-maven-pluginartifactId>
        <version>3.1.1version>
        <executions>
            <execution>
                <id>exec-npm-run-buildid>
                <phase>testphase>
                <goals>
                    <goal>execgoal>
                goals>
                <configuration>
                    <executable>lsexecutable>
                    <arguments>
                        <argument>-alhargument>
                    arguments>
                    <workingDirectory>${basedir}workingDirectory>
                configuration>
            execution>
        executions>
    plugin>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    上面的配置,我们执行了一个Linux下的命令。
    具体配置如下:

    • executable
      表示执行的命令,比如上面的java表示要执行java这个命令,当然这里可以时任意的控制台命令
    • workingDirectory
      当前命令执行时的工作目录
    • arguments
      当前命令执行时传递的参数

    这里需要注意:executable标签里面的命令必须要在系统中能找到,也就是环境变量中要配置相关的命令,这个与本地的操作系统有关系,比如在Linux系统下的命令,大部分在Windows下是无法运行的

    exec其实也能完成exec:java的功能,和在控制台使用Java命令来启动Java程序的配置一样,大家可以自行研究

    使用exec-maven-plugin来构建前端项目

    这里我给出一个实例,使用exec-maven-plugin插件来构建Vue项目

    首先我们准备一个Vue项目,然后在项目的目录下加入pom.xml文件,
    项目结构如下:
    在这里插入图片描述
    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/maven-v4_0_0.xsd">
       <modelVersion>4.0.0modelVersion>
        <groupId>com.testgroupId>
        <artifactId>test-vueartifactId>
        <version>1.0.0version>
        <name>test-vuename>
        <description>test-vuedescription>
        <build>
            <finalName>test-vuefinalName>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojogroupId>
                    <artifactId>exec-maven-pluginartifactId>
                    <executions>
                        <execution>
                            <id>exec-npm-run-installid>
                            <phase>generate-sourcesphase>
                            <goals>
                                <goal>execgoal>
                            goals>
                            <configuration>
                                <executable>yarnexecutable>
                                <arguments>
                                    <argument>installargument>
                                arguments>
                                <workingDirectory>${basedir}workingDirectory>
                            configuration>
                        execution>
                        <execution>
                            <id>exec-npm-run-buildid>
                            <phase>generate-sourcesphase>
                            <goals>
                                <goal>execgoal>
                            goals>
                            <configuration>
                                <executable>yarnexecutable>
                                <arguments>
                                    <argument>runargument>
                                    <argument>buildargument>
                                arguments>
                                <workingDirectory>${basedir}workingDirectory>
                            configuration>
                        execution>
                    executions>
                plugin>
            plugins>
        build>
    project>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    这里我们添加了两个execution
    第一步:执行yarn install
    第二步:执行yarn build
    通过maven我们可以将两步一次性操作
    这样我们直接在项目目录下执行maven打包命令:

    mvn clean -DskipTests package
    
    • 1

    执行完成后,项目目录下就会生成dist文件夹,说明打包完成。我们在进行前后端分离开发的时候,就可以和我们的后台项目一起来编译。在后续的章节中我会给大家继续介绍。

    直接用mvn命令来使用exec-maven-plugin插件

    除了上面的pom.xml来配置插件使用外,我们还可以直接使用mvn命令来使用exec-maven-plugin插件,比如我要要执行exec:java的golas,可以使用下面命令:

    mvn exec:exec -Dexec.executable="java" [...] -Dexec.args="%classpath"
    
    • 1

    上面的classpath需要替换成系统的,同样,可以将java换成exec

    这种方式不是很常用,因为在使用过程中没有pom.xml方式灵活。

    二、maven-antrun-plugin使用

    在早期的Java程序编译中,用的最多的是使用ant来构建项目,关于ant的详细使用大家可以点击官网查看,ant目前我们已经很少使用了,基本上被maven替代,但是ant中有些工具还是很方便,所以在maven中我们依然可以来使用,下面我介绍几个在ant中常用的工具如何在maven中使用。
    首先在pom.xml中加入配置:

    <plugin>
      <artifactId>maven-antrun-pluginartifactId>
      <version>3.1.0version>
      <executions>
        <execution>
          <phase>testphase>
          <configuration>
            <target>
    
              
    
            target>
          configuration>
          <goals>
            <goal>rungoal>
          goals>
        execution>
      executions>
    plugin>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在上面的配置中,我们就可在target标签里面加入ant的任务来执行。

    echo打印功能

    加入下面配置:

     <target>
        <echo>this is ant 1echo>
        <echo>this is ant 2echo>
        <echo>this is ant 3echo>
        <property name="p1">4property>
        <echo message="p1 is: ${p1}"/>
    target>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    然后运行:

    mvn clean -DskipTests package
    
    • 1

    查看控制台输出:

    [INFO] --- maven-antrun-plugin:3.1.0:run (default) @ test-mvn-pkg-exe-springboot ---
    [INFO] Executing tasks
    [WARNING]      [echo] this is ant 1
    [WARNING]      [echo] this is ant 2
    [WARNING]      [echo] this is ant 3
    [WARNING]      [echo] p1 is: 4
    [INFO] Executed tasks
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    拷贝文件

    加入配置:

    <copy todir="${project.build.directory}" overwrite="true">
       <fileset file="${basedir}/assembly/package.xml"/>
    copy>
    
    • 1
    • 2
    • 3

    这里会把项目目录下assembly目录下的package.xml文件拷贝到target目录下
    其中:

    • todir
      拷贝的目的地
    • overwrite
      是否覆盖已有的文件,默认为false
    • fileset
      单个文件,如果有多个可以添加多个fileset
      单文件拷贝还有一种配置,可以进行重命名:
    <copy file="${basedir}/assembly/package.xml" tofile="${project.build.directory}/package.xml" overwrite="true"/>
    
    • 1

    拷贝文件夹

    配置如下:

    <copy todir="${project.build.directory}/assembly" overwrite="true">
       <fileset dir="${basedir}/assembly"/>
    copy>
    
    • 1
    • 2
    • 3
    • todir
      拷贝的目的地
    • overwrite
      是否覆盖
    • dir
      源文件夹

    拷贝文件(文件夹)的操作还可以使用excludes配合正则来使用,大家可以参照ant官网

    ftp/scp/sshexec

    ant还能通过远程操作命令,来执行不同的任务,具体命令的使用大家可以参照ant的官网
    下面的配置是上传ftp的一个例子:

     <ftp action="send" server="192.168.101.110" remotedir="/home/" userid="root" password="123456" depends="yes" verbose="yes">
        <fileset dir="${project.build.directory}">
            <include name="*.jar" />
        fileset>
    ftp>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    总结

    exec-maven-plugin和maven-antrun-plugin都是用来执行额外脚本的插件,我们在编译大项目时,这两个插件的使用还是很频繁,他们各自都有很强大的功能。

  • 相关阅读:
    移动端阻止Touch导致的页面滑动/缩放
    三一充填泵:煤矿矸石无害化充填,煤炭绿色高效开采的破局利器
    nfs共享本机目录遇到错误
    ChinaSoft 论坛巡礼 | 系统与网络安全论坛
    快速理解C语言——指针
    【云原生】聊聊为什么需要docker以及其基础架构
    网络通讯之Socket-Tcp(一)
    JavaScript中的const和let
    C++ Reference: Standard C++ Library reference: C Library: cstring: strncat
    【无标题】Maven的属性引用
  • 原文地址:https://blog.csdn.net/txhlxy/article/details/136184017