maven站点插件3.3 java.lang.ClassNotFoundException:org.apache.maven.doxia.siterenderer.DocumentContent


78

从今天晚上开始,maven site 3.3插件停止工作。

尝试删除本地存储库,但不要更改。Maven 3.3.9 Java 1.8

在pom中没有为站点插件定义任何配置或依赖项

[WARNING] Error injecting: org.apache.maven.report.projectinfo.CiManagementReport
java.lang.NoClassDefFoundError: org/apache/maven/doxia/siterenderer/DocumentContent

Answers:


108

我刚刚开始在构建过程中也遇到了这个问题。对我有用的是在pom中专门定义maven-site-plugin和和maven-project-info-reports-plugin以及版本号。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-site-plugin</artifactId>
  <version>3.7.1</version>
</plugin>
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-project-info-reports-plugin</artifactId>
  <version>3.0.0</version>
</plugin>

5
谢谢,我只是在pom中添加了2.7版的maven-project-info-reports-plugin,现在可以了。
timmy otool

也为我工作!谢谢。
user577736

57

这是由于将maven-project-info-reports-plugin更新为3.0.0,并依赖于doxia-site-renderer 1.8(并且具有org.apache.maven.doxia.siterenderer.DocumentContent此类),但是maven-site -plugin:3.3依赖于doxia-site-renderer:1.4(并且没有org.apache.maven.doxia.siterenderer.DocumentContent)

我们可以在报告部分中指定特定的maven-project-info-reports-plugin版本:

<reporting>
        <plugins>           
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>2.9</version>
            </plugin>           
        </plugins>    
    </reporting>

或者我们可以将maven-site-plugin指定为最新的3.7.1,例如:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-site-plugin</artifactId>
    <version>3.7.1</version>
</plugin>

在pom的一部分


这实际上是真正的原因。我想知道是什么(或者更好的是谁)触发了此更新?Maven从哪里获得此信息?
ChristopherS

1
@mbreck是的,我们需要向每个pom添加配置。
彰化'18

必须在“项目插件”部分中指定maven-site-plugin版本。“新”报告部分使我很困惑,似乎是多余的。对我来说,这些天行家几乎无法使用。
Wolfgang Fahl

这对我来说非常有效。我定义maven-checkstyle-plugin (3.0.0)maven-project-info-reports-plugin (2.9)<reporting>pom.xml
user2490003

1
仅在将maven-project-info-reports-plugin降级到v2.9后,它才对我有用,即使我使用过maven-site-plugin v3.7.1
Elayamathy

11

Maven网站插件的版本也需要在build部分中明确设置。这是示例:

<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-project-info-reports-plugin</artifactId>
            <version>3.0.0</version>
            <reportSets>
                <reportSet>
                    <reports>
                        <report>index</report>
                        <report>licenses</report>
                        <report>dependency-info</report>
                    </reports>
                </reportSet>
            </reportSets>
        </plugin>
    </plugins>
</reporting>

<build>
    <plugins>
        <!-- Part of Maven - specified version explicitly for compatibility
             with the maven-project-info-reports-plugin 3.0.0-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.7.1</version>
        </plugin>
    </plugins>
</build>

2
谢谢!在遵循Maven入门指南并执行“ MVN网站”时出现错误。将您的代码段添加到我的pom.xml后,命令现在可以使用了。
AbstractVoid18年

1
@WallTearer就是这样。我不知道在控制台或Eclipse中输入教程后它是否具有不同的行为(我猜应该不是)。无论如何,我猜应该更新用户指南。
foxTox

杰夫是男人。我想是因为<build>vs<reporting>分离使它对我有用。
javabeangrinder


1

您确实需要添加更多信息(我并没有拒绝BTW的投票)。

IIRC;如果您未为绑定到生命周期阶段的插件指定版本,则将获取最新版本。

尝试:

  • 升级到最新版本的Maven- 3.5.4 ATOW
  • 运行mvn help:effective-pom并检查实际上正在解决的版本-如果您有来自CI的旧日志或可与之比较的地方。
  • maven-site-plugin在本pluginManagement节中明确设置版本
  • 添加依赖项maven-site-plugin(见下文)

org/apache/maven/doxia/siterenderer/DocumentContent可以在以下位置找到doxia-site-renderer

    <dependency>
        <groupId>org.apache.maven.doxia</groupId>
        <artifactId>doxia-site-renderer</artifactId>
        <version>1.8.1</version>
    </dependency>

我怀疑将maven-site-plugin的版本显式设置为您曾经使用过的任何版本(偶然)都可以。


编辑:在maven插件构建测试中遇到了类似的问题,在我maven-site-plugin使用的集成pom中显式设置版本(3.7.1 ATOW)maven-invoker-plugin对我有用。


1

我今天在一些构建工作中也遇到了这个错误。上面建议的修复程序,为maven-site-plugin添加了一个具体的依赖项,确实可以解决此问题。

但是,对我而言突出的是我什至运行了mvn网站目标,我什至不知道我们正在运行并且我们并不需要。

因此,我的解决方法是从mvn arg中删除网站目标,因为尽管它创建的网站实际上非常有用,但我不知道我们在创建它,我们从未在任何地方发布过它,并且实际上无论如何都在删除它。


1

我尝试遵循彰化的建议,并在pom文件中将maven-project-info-reports-plugin定义为3.0.0版,并将maven-site-plugin定义为3.7.1,但是发现maven站点仍在3.3版中maven-site-plugin的代码,无论我如何设置。

我终于意识到我的问题与我们的项目结构有关。我们有一个父pom,在其中定义了maven-site-plugin依赖关系,然后由子pom继承。但是,build pom文件是单独的,并且根本没有定义maven-site-plugin,这允许maven自己引入3.3版本。我在构建pom文件中添加了maven-site-plugin依赖性(版本3.7.1),以便它现在同时存在于构建pom文件和父pom文件中,并且现在构建正确使用3.7.1版,并再次通过。


1

pom.xml中的以下版本为我解决了该问题:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.7</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>2.9</version>
            </plugin>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.