调试maven构建的3种方法:maven调试教程

1,051 阅读3分钟

Maven 是一个自动构建项目管理工具,通过在 中定义所有的依赖关系来实现构建过程的自动化。pom.xml

开发人员在开发阶段和发布阶段构建和运行maven项目时,会遇到很多问题。

本文解释了如何调试maven构建中的任何问题的多种方法。

调试maven项目的方法有很多。

以下是调试maven构建问题的不同方法:

  • 使用-x--debug 或命令行-e
  • mvn依赖树
  • 使用maven surefire插件进行调试

我列出了找出真正问题的必要步骤。

maven调试模式

如果您在运行maven目标(如compileinstall )时遇到问题,会显示信息。如果发生任何故障,这些信息对找出确切原因没有帮助。

在这种情况下,请尝试运行maven 命令,选择-X-e--debug 标志,这样可以清楚地显示错误发生的位置、插件配置和详细的类加载信息,这对编码人员找到问题的真正原因很有帮助。

这种方法完全适用于maven插件的编纂者:

mvn -X  prints debugging messages
or 
mvn -e shows error messages
mvn -e shows error messages

请记住,这只是maven在构建项目时的调试信息。

这不是为你的项目调试,即不同的概念。我将在以后的文章中再写一篇关于java项目调试技巧的文章。

该选项将以调试模式启动maven。它将提供完整的信息,如加载到项目中的不同依赖项以及正在运行的目标。

maven中的依赖性问题

在实时的maven项目构建中,我们看到我们的项目有direct ,也有indirect 的依赖。

假设在你的项目中,你直接依赖一个模块,比如log4j-1.2.12 ,你还有一个间接依赖log4j-1.2.12 (来自spring 2.0.6 ,该模块对你的项目有依赖性)。这就是你的项目有两个相同的模块(log4j)但版本不同的情况。这将导致在网络服务器上启动项目时,类的加载出现不兼容的问题。那么你必须在你的pom.xml中保留所需的模块,并通过指定排除配置忽略另一个模块。

要找出你的项目的依赖树,你必须使用下面的命令

mvn dependency:tree

这个命令以树状资源管理器的格式列出了你的项目的所有依赖关系,所有这些依赖关系都被下载到你的本地资源库。

你可以找出需要保留和排除的版本,如下所示,如果我们想把log4j从spring依赖中排除,你可以在exclusionsexclusion 标签中使用dependency 标签。

<dependencies>
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>2.5.1</version>
            <exclusions>
              <exclusion>
                <groupId>log4j</groupId>
                <artifactId>jetty</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
        </dependencies>

用maven surefire调试测试

我们将使用mvn test来运行maven项目的测试案例。如你所知,maven surefire插件用于运行项目的单元测试。

你必须在maven测试目标中提供maven.surefire.debug属性。

mvn -Dmaven.surefire.debug test

这将在一个单独的进程中运行测试。该进程将监听5005端口。你可以把这个进程附加到eclipse上进行远程调试。在eclipse中,你必须创建并配置maven调试选项,如下所示。

hostname is localhost


`and port  is 5005`

这是maven提供的最酷的eclipse远程调试功能之一 每当我们开始执行maven测试用例时,你可以在测试类中设置断点以停止调试器,达到调试目的。一旦maven执行结束,eclipse调试器就会终止该进程。

另一种方法是不以分叉模式运行调试器,即在同一进程中执行测试,我们可以使用

mvn -DforkMode never test