使用 pom 将 Maven 输出发送到控制台和日志文件

Posted

技术标签:

【中文标题】使用 pom 将 Maven 输出发送到控制台和日志文件【英文标题】:Send Maven output to console and log file using pom 【发布时间】:2017-02-09 11:36:56 【问题描述】:

问题:在 Eclipse 中运行 Maven 时,如何将控制台输出发送到文件?

我想使用 pom 设置或 maven 插件来实现这一点。我确实想修改运行配置或 maven 系统设置。

作为参考,我使用的是 Windows 7、Eclipse Luna、Java 6、Maven 3。

【问题讨论】:

你不能那样做,你的答案是唯一的出路。 Maven 在读取 POM 之前如何编写文件?还要考虑多模块项目,其中该配置只能在一个模块中。 尝试使用 AOP。通过在默认的 org.apache.maven.plugin.logging.Log 上应用切入点,成功地将日志重定向到文件。但是太多的努力是白费的。试一试。 【参考方案1】:

根据official command line options,您可以使用-l,--log-file <arg>,它提供:

所有构建输出的日志文件。

因此,运行:

mvn clean install -l output.log

不会将任何内容打印到控制台并自动将整个构建输出重定向到output.log文件。

如果您不想每次都输入它(或者您实际上不想使用命令行)并且您希望它作为默认选项(尽管我认为很少见),您可以使用新的命令行选项行为自版本 3.3.1 起可用,并且有一个 .mvn 文件夹,相关的 pom.xml 文件所在的文件夹和其中的 maven.config 文件只需提供以下行:

-l output.log

也就是说,.mvn/maven.config 文件仅在其创建的本地项目中替换MAVEN_OPTIONS,并使用它提供的选项,而不影响按照@的Maven设置的其他构建987654333@.

这是一个与 IDE 无关的解决方案(它是 Maven 的新内置功能)并且是项目本地的,但仍然不能通过简单的 POM 编辑提供,因为Maven default life cycle phases 的第一阶段是@987654334,所以无法实现@,其中:

验证项目是否正确,所有必要的信息都可用

也就是说,在构建期间,因此当构建已经开始(并生成输出)时,它会验证 pom.xml 文件,因此在该阶段重定向构建输出为时已晚一些 POM 属性/插件。

【讨论】:

即使登录Eclipse控制台窗口丢失了,这也是最合理的答案。【参考方案2】:

运行并选择Run Configuration -> Commons -> Select a file。 这应该将您的输出重定向到您指定的文件。

【讨论】:

这是一个很好的答案,但我正在寻找一些方法来通过仅修改 pom 来实现这一点。我已经更新了我的问题。【参考方案3】:

根据this,您可以尝试编辑$MAVEN_HOME/conf/logging/simplelogger.properties。我快速尝试了一下,maven 的输出被重定向了,但是写给stdout 的任何其他内容(例如测试)仍然会写在控制台上

【讨论】:

这是对的,但是我正在寻找一个不修改maven设置的解决方案。 是的,我希望您可以覆盖项目文件的<properties> 部分中的这些设置,但它似乎不起作用...【参考方案4】:

如何创建一个 M2E 的分支并对其进行修改以从 pom.xml 读取启动配置的输出文件

https://github.com/eclipse/m2e-core.git

【讨论】:

【参考方案5】:

一个可能的解决方案是在mvn file 中设置输出格式。例如,在目录/usr/bin 中,在exec "$JAVACMD" \ 行的末尾添加所需的输出,告知日志将保存的路径:| tee /home/maven-log.log.

但是,它仅在终端线调用 maven 时有效;当由 IDE(如 eclipse)调用时,此解决方案不起作用。

【讨论】:

以上是关于使用 pom 将 Maven 输出发送到控制台和日志文件的主要内容,如果未能解决你的问题,请参考以下文章

Apache nifi 将年、月和日时间戳附加到合并的输出文件

将 Maven 输出发送到文件

Maven私服配置Setting和Pom文件

Maven---Nexus私服配置Setting和Pom

maven shaded jar:更改输出位置

Maven---Nexus私服配置Setting和Pom