maven-javadoc-plugin打破了mvn release:perform

时间:2014-09-22 22:08:02

标签: java maven

我尝试在我过去发布到Nexus服务器很多的三个项目上执行mvn release:perform。今天突然间,所有版本都无法执行目标org.apache.maven.plugins:maven-javadoc-plugin:2.10:jar (attach-javadocs)

启用完整堆栈跟踪和调试日志记录(-e-X)后,我看到有关丢失软件包的几百行错误:

...    
package org.apache.http does not exist
package org.slf4j does not exist
package org.joda.time does not exist
...

但是,所有这些软件包都在我的本地存储库和Nexus服务器中。此外,我没有从mvn clean install获得任何这些错误,并且所有项目(Java Web应用程序)实际上都是从Intellij启动而没有问题 - 所以很明显我实际上并没有错过数百个软件包。

mvn release:performmvn clean install没有任何问题时,有什么可能阻止mvn release:prepare找到这些套餐?

6 个答案:

答案 0 :(得分:29)

似乎有一系列关于maven-javadoc-plugin更新的问题。请参阅https://issues.apache.org/jira/browse/MJAVADOC-408

如果没有另外指定,mvn使用最新版本的“内置”插件,我会看到一些好处(相对于给定Maven版本的“固定版本”),但这意味着插件维护者有义务在插件发布时针对每个版本的Maven进行回归测试。也许错过了一些东西。

一种解决方法是在组织的超级POM中明确指定先前版本的maven-javadoc-plugin,或者如果不能快速更改超级POM,则显式指定项目POM:

<pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>2.9.1</version>
    </plugin>
  </plugins>
</pluginManagement>

我们的CI装备(詹金斯)今天遇到了同样的问题。希望新的maven-javadoc-plugin将被推送,它的依赖树更新(如果这确实是问题)。 FWIW,我们在3.0.5(ya,由于各种原因而感到悲伤)。

更新2014-09-24

整个hubub似乎起源于maven-javadoc-plugin维护者对yet-to-be-closed issue java-1.8.0-openjdkMJAVADOC-398的回复。我不知道为什么有人会为未解决的下游项目缺陷发布突破性的解决方案。

更新2014-10-02

MJAVADOC-406已得到解决,Maven Central中有2.10.1个版本的maven-javadoc-plugin,可能还有很多靠近您的存储库。

使用未固定的javadoc插件版本构建应该现在恢复正常。

故事的道德

Maven-folk,你已被警告过。锁定插件依赖项,因为它们可能会变得流氓。

P.S。,MJAVADOC-408已被关闭为MJAVADOC-407的副本。

答案 1 :(得分:29)

解决此问题的另一种方法是添加以下属性:

...
<properties>
<maven.javadoc.failOnError>false</maven.javadoc.failOnError>
...
</properties>
pom.xml中的

答案 2 :(得分:10)

默认情况下,mvn发行包使用特殊的配置文件。此默认配置文件包括一些默认插件配置(例如自动attach-javadocs作为构建的一部分)。

这就是您的构建仅在mvn release:perform而不在mvn clean install上失败的原因。

如果您想更好地控制将要使用的配置(例如,如果您不想要javadoc,或者您想为javadoc提供自己的配置),您可以尝试禁用此功能通过添加配置默认配置文件: <useReleaseProfile>false</useReleaseProfile>

或在命令行中: mvn release:perform -DuseReleaseProfile=false

此处有更多信息:http://maven.apache.org/maven-release/maven-release-plugin/perform-mojo.html#useReleaseProfile

答案 3 :(得分:4)

我刚刚使用Javadoc插件2.9.1进行了以前正在运行的构建失败。

在我的情况下,这是因为我从7切换到Java 8,而8中的javadoc工具似乎对其检查更加严格。我的代码中有一个损坏的{@link ...},7中的工具正在通过。

答案 4 :(得分:4)

如果不需要javadocs生成,只需添加skip属性:

<properties>
    <maven.javadoc.skip>true</maven.javadoc.skip>
</properties>

答案 5 :(得分:1)

我有2.8版本和

<maven.javadoc.failOnError>false</maven.javadoc.failOnError>

作品