1. 概述

有时,我们可能想在 Maven 执行过程中打印一些额外的信息。但是,在 Maven 构建生命周期中没有内置方法可以将值输出到控制台。

在本教程中,我们将探索 在 Maven 执行期间启用打印消息的 插件。我们将讨论三个不同的插件,每个插件都可以绑定到我们选择的特定 Maven 阶段。

2.AntRun插件

首先,我们将讨论 AntRun 插件。它提供了从 Maven 中运行 Ant 任务的能力。要在我们的项目中使用该插件,我们需要将 maven-antrun-plugin 添加到 pom.xml 中:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>3.0.0</version>
    </plugin>
</plugins>

让我们在 执行 标签中定义目标和阶段。此外,我们将添加包含带有 回显 消息的 目标的 配置 标签:

<executions>
    <execution>
        <id>antrun-plugin</id>
        <phase>validate</phase>
        <goals>
            <goal>run</goal>
        </goals>
        <configuration>
            <target>
                <echo message="Hello, world"/>
                <echo message="Embed a line break: ${line.separator}"/>
                <echo message="Build dir: ${project.build.directory}" level="info"/>
                <echo file="${basedir}/logs/log-ant-run.txt" append="true" message="Save to file!"/>
            </target>
        </configuration>
    </execution>
</executions>

我们可以 打印常规字符串以及属性值echo 标签将消息发送到当前的记录器和侦听器,除非被覆盖,否则它们对应于 System.out我们还可以指定一个 级别 ,它告诉插件应该在什么日志级别过滤 消息

该任务还可以 回显 到文件。 我们可以通过将 追加 属性分别设置为 truefalse 来附加到文件或覆盖它。如果我们选择登录到文件,我们应该忽略日志 级别 。只有标有 文件 标签的消息才会记录到文件中。

3.Echo Maven 插件

如果我们不想使用基于 Ant*,* 的插件,我们可以将 echo-maven-plugin 依赖项添加到 pom.xml 中:

<plugin>
    <groupId>com.github.ekryd.echo-maven-plugin</groupId>
    <artifactId>echo-maven-plugin</artifactId>
    <version>1.3.2</version>
</plugin>

就像我们在前面的插件示例中看到的那样,我们将在 执行 标记中声明目标和阶段。接下来,我们将填写 配置 标签:

<executions>
    <execution>
        <id>echo-maven-plugin-1</id>
        <phase>package</phase>
        <goals>
            <goal>echo</goal>
        </goals>
        <configuration>
            <message>
                Hello, world
                Embed a line break: ${line.separator}
                ArtifactId is ${project.artifactId}
            </message>
            <level>INFO</level>
            <toFile>/logs/log-echo.txt</toFile>
            <append>true</append>
        </configuration>
    </execution>
</executions>

同样,我们可以打印简单的字符串和属性。我们还可以使用 level 标签设置日志级别。使用 toFile 标签,我们可以指示将保存日志的文件的路径。最后,如果我们想打印多条消息,我们应该为每条消息添加一个单独的 执行 标签。

4.Groovy Maven 插件

要使用 groovy-maven-plugin 我们必须将依赖项放入 pom.xml 中:

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>groovy-maven-plugin</artifactId>
    <version>2.1.1</version>
</plugin>

此外,让我们在 执行 标签中添加阶段和目标。接下来,我们将 标签放入 配置 部分。它包含 Groovy 代码:

<executions>
    <execution>
        <phase>validate</phase>
        <goals>
            <goal>execute</goal>
        </goals>
        <configuration>
            <source>
                log.info('Test message: {}', 'Hello, World!')
                log.info('Embed a line break {}', System.lineSeparator())
                log.info('ArtifactId is: ${project.artifactId}')
                log.warn('Message only in debug mode')
            </source>
        </configuration>
    </execution>
</executions>

与之前的解决方案类似,Groovy 记录器允许我们设置日志记录级别。从代码层面,我们也可以轻松访问Maven属性。此外,我们可以使用 Groovy 脚本将消息写入文件。

感谢 Groovy 脚本,我们可以 向消息添加更复杂的逻辑 。 Groovy 脚本 也可以从文件加载 ,因此我们不必用长的内联脚本来混淆 pom.xml

5. 结论

在这个快速教程中,我们了解了如何使用各种插件进行打印。我们描述了如何使用 maven-antrun-pluginecho-maven-plugingroovy-maven-plugin 进行打印。此外,我们还介绍了几个用例。

最后,本文的所有源代码都可以在 GitHub 上获得。