如何调试 Maven 插件?
How to debug Maven plugin?
我使用在我的 POM 中配置的 allure-maven 插件。但是,当
失败时
ru.yandex.qatools.allure.data.ReportGenerationException: Could not find any allure results
我想在运行时调试插件,看看它是否正确设置了所有变量。
我已尝试根据 Debugging in Maven? 的答案使用 mvnDebug
。当 Maven 使用 surefire 插件执行测试时,我能够将调试器连接到 JVM。但是,当 Maven 尝试使用 allure 插件生成 Allure 报告时,我无法连接调试器。 Allure 插件在 POM 的 "reporting" 部分定义,并由 "site" Maven 目标使用。
这是我用 mvn clean test site
命令调用的 POM(几乎完成,我省略了依赖项部分)。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<argLine>-Xmx2048m -XX:-UseSplitVerifier -XX:MaxPermSize=256m
-javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar
</argLine>
<properties>
<property>
<name>parallel</name>
<value>classes</value>
</property>
<property>
<name>threadcount</name>
<value>4</value>
</property>
</properties>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<reporting>
<excludeDefaults>true</excludeDefaults>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.19.1</version>
</plugin>
<plugin>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-maven</artifactId>
<version>2.8</version>
<configuration>
</configuration>
</plugin>
</plugins>
</reporting>
<pluginRepositories>
<pluginRepository>
<id>mvn-nexus-all</id>
<url>https://lunabuild.akamai.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
下面是失败插件的完整堆栈跟踪:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.3:site (default-site) on project sso-config-tests: Error during page generation: Error rendering Maven report: Could not generate the report: InvocationTargetException: Could not find any allure results -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.3:site (default-site) on project sso-config-tests: Error during page generation
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error during page generation
at org.apache.maven.plugins.site.SiteMojo.execute(SiteMojo.java:143)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
... 20 more
Caused by: org.apache.maven.doxia.siterenderer.RendererException: Error rendering Maven report: Could not generate the report
at org.apache.maven.plugins.site.ReportDocumentRenderer.renderDocument(ReportDocumentRenderer.java:233)
at org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.renderModule(DefaultSiteRenderer.java:319)
at org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.render(DefaultSiteRenderer.java:135)
at org.apache.maven.plugins.site.SiteMojo.renderLocale(SiteMojo.java:175)
at org.apache.maven.plugins.site.SiteMojo.execute(SiteMojo.java:138)
... 22 more
Caused by: org.apache.maven.reporting.MavenReportException: Could not generate the report
at ru.yandex.qatools.allure.report.AllureGenerateMojo.executeReport(AllureGenerateMojo.java:127)
at org.apache.maven.reporting.AbstractMavenReport.generate(AbstractMavenReport.java:255)
at org.apache.maven.plugins.site.ReportDocumentRenderer.renderDocument(ReportDocumentRenderer.java:219)
... 26 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at ru.yandex.qatools.allure.report.AllureGenerateMojo.executeReport(AllureGenerateMojo.java:123)
... 28 more
Caused by: ru.yandex.qatools.allure.data.ReportGenerationException: Could not find any allure results
at ru.yandex.qatools.allure.data.AllureReportGenerator.generate(AllureReportGenerator.java:58)
at ru.yandex.qatools.allure.data.AllureReportGenerator.generate(AllureReportGenerator.java:53)
at ru.yandex.qatools.allure.AllureMain.main(AllureMain.java:48)
... 33 more
如果您使用 mvnDebug clean install
而不是 mvn clean install
开始构建,Maven 将等待远程调试器连接到端口 8000
。这应该适用于所有在他们自己的 JVM 中不 运行 的插件。
这需要 Maven 大于 2.0.8
,我假设你是 运行ning。
见Debugging in Maven?
而不是 allure-maven
插件调试,您可能想先修复配置问题。您将插件放入了错误的 pom 部分。看官方插件的docs.
Allure 2 不再使用 reporting 部分。您应该将插件放入 build 部分。
报告生成命令也已更新。您应该使用以下内容而不是 site
目标调用:
mvn allure:report
mvn allure:serve
查看 this 示例以了解有效配置。
如果你想从 Intellij IDEA 调试它。
我假设你 运行 捆绑了 mvn,JDK9+
- 转到 IDEA 中的 Maven 运行ner 设置。
- 在 VM 选项中指定此行:
-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=y
Maven 不会在您连接到
远程调试器。
- 创建远程调试器配置(指定端口 5005)。
- 运行 远程调试器(不要忘记在代码中添加断点)。
我使用在我的 POM 中配置的 allure-maven 插件。但是,当
失败时ru.yandex.qatools.allure.data.ReportGenerationException: Could not find any allure results
我想在运行时调试插件,看看它是否正确设置了所有变量。
我已尝试根据 Debugging in Maven? 的答案使用 mvnDebug
。当 Maven 使用 surefire 插件执行测试时,我能够将调试器连接到 JVM。但是,当 Maven 尝试使用 allure 插件生成 Allure 报告时,我无法连接调试器。 Allure 插件在 POM 的 "reporting" 部分定义,并由 "site" Maven 目标使用。
这是我用 mvn clean test site
命令调用的 POM(几乎完成,我省略了依赖项部分)。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<argLine>-Xmx2048m -XX:-UseSplitVerifier -XX:MaxPermSize=256m
-javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar
</argLine>
<properties>
<property>
<name>parallel</name>
<value>classes</value>
</property>
<property>
<name>threadcount</name>
<value>4</value>
</property>
</properties>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<reporting>
<excludeDefaults>true</excludeDefaults>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.19.1</version>
</plugin>
<plugin>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-maven</artifactId>
<version>2.8</version>
<configuration>
</configuration>
</plugin>
</plugins>
</reporting>
<pluginRepositories>
<pluginRepository>
<id>mvn-nexus-all</id>
<url>https://lunabuild.akamai.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
下面是失败插件的完整堆栈跟踪:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.3:site (default-site) on project sso-config-tests: Error during page generation: Error rendering Maven report: Could not generate the report: InvocationTargetException: Could not find any allure results -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.3:site (default-site) on project sso-config-tests: Error during page generation
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error during page generation
at org.apache.maven.plugins.site.SiteMojo.execute(SiteMojo.java:143)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
... 20 more
Caused by: org.apache.maven.doxia.siterenderer.RendererException: Error rendering Maven report: Could not generate the report
at org.apache.maven.plugins.site.ReportDocumentRenderer.renderDocument(ReportDocumentRenderer.java:233)
at org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.renderModule(DefaultSiteRenderer.java:319)
at org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.render(DefaultSiteRenderer.java:135)
at org.apache.maven.plugins.site.SiteMojo.renderLocale(SiteMojo.java:175)
at org.apache.maven.plugins.site.SiteMojo.execute(SiteMojo.java:138)
... 22 more
Caused by: org.apache.maven.reporting.MavenReportException: Could not generate the report
at ru.yandex.qatools.allure.report.AllureGenerateMojo.executeReport(AllureGenerateMojo.java:127)
at org.apache.maven.reporting.AbstractMavenReport.generate(AbstractMavenReport.java:255)
at org.apache.maven.plugins.site.ReportDocumentRenderer.renderDocument(ReportDocumentRenderer.java:219)
... 26 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at ru.yandex.qatools.allure.report.AllureGenerateMojo.executeReport(AllureGenerateMojo.java:123)
... 28 more
Caused by: ru.yandex.qatools.allure.data.ReportGenerationException: Could not find any allure results
at ru.yandex.qatools.allure.data.AllureReportGenerator.generate(AllureReportGenerator.java:58)
at ru.yandex.qatools.allure.data.AllureReportGenerator.generate(AllureReportGenerator.java:53)
at ru.yandex.qatools.allure.AllureMain.main(AllureMain.java:48)
... 33 more
如果您使用 mvnDebug clean install
而不是 mvn clean install
开始构建,Maven 将等待远程调试器连接到端口 8000
。这应该适用于所有在他们自己的 JVM 中不 运行 的插件。
这需要 Maven 大于 2.0.8
,我假设你是 运行ning。
见Debugging in Maven?
而不是 allure-maven
插件调试,您可能想先修复配置问题。您将插件放入了错误的 pom 部分。看官方插件的docs.
Allure 2 不再使用 reporting 部分。您应该将插件放入 build 部分。
报告生成命令也已更新。您应该使用以下内容而不是 site
目标调用:
mvn allure:report
mvn allure:serve
查看 this 示例以了解有效配置。
如果你想从 Intellij IDEA 调试它。 我假设你 运行 捆绑了 mvn,JDK9+
- 转到 IDEA 中的 Maven 运行ner 设置。
- 在 VM 选项中指定此行:
-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=y
Maven 不会在您连接到 远程调试器。
- 创建远程调试器配置(指定端口 5005)。
- 运行 远程调试器(不要忘记在代码中添加断点)。