如何使用源代码和JavaDoc部署快照版本?

105

我希望能够在我的快照中部署源代码和Java文档。这意味着我想要自动化以下命令:

mvn clean source:jar javadoc:jar deploy

仅需执行:

mvn clean deploy

我不想在“install”阶段(即本地构建)执行javadoc/sources生成。

我知道源代码/ javadoc插件可以与“release”插件的执行同步,但我无法弄清楚如何将其连接到快照发布。

3个回答

91
<build>
  <plugins> 
    <plugin>
      <artifactId>maven-source-plugin</artifactId>
      <executions>
        <execution>
          <id>attach-sources</id>
          <phase>deploy</phase>
          <goals><goal>jar-no-fork</goal></goals> 
        </execution>
      </executions>
    </plugin>
    <plugin> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <executions> 
        <execution> 
          <id>attach-javadocs</id>
          <phase>deploy</phase>
          <goals><goal>jar</goal></goals> 
        </execution> 
      </executions> 
    </plugin>
    <plugin> 
      <!-- explicitly define maven-deploy-plugin after other to force exec order -->
      <artifactId>maven-deploy-plugin</artifactId> 
      <executions> 
        <execution> 
          <id>deploy</id>
          <phase>deploy</phase>
          <goals><goal>deploy</goal></goals> 
        </execution> 
      </executions> 
    </plugin>
  </plugins> 
</build>

请参考Sonatype的OSS Parent POM,这里有一个完整的例子。


2
我正在使用这个设置,它运行得相当不错。然而,我遇到了两个小问题:一是生成的源代码未包含在“jar”目标中,您需要使用“jar-no-fork”。二是发布插件存在一个错误,会导致生成发布源代码两次(因此部署两次),这将导致与存储库管理器的问题。 - mglauche
1
maven-source-plugin:jar 默认附加到 package 阶段,因此您可以省略 <phase> verify </phase> 并实现相同的效果。另外,我不确定为什么您要将它附加到验证阶段,因为该阶段旨在“打包项目并运行集成测试”。 - matt b
1
@Henryk 好的,我已经明确添加了maven-deploy-plugin,因为maven似乎(或尝试)保证按照POM中定义插件的顺序执行。不过可能需要一些实验。 - sfussenegger
1
使用随机ID创建新的执行,我认为您想要“重新映射”默认执行。 - Hurda
3
这在我使用Maven 3.1.1时无法正常工作。尽管它们在pom中的顺序不同,但部署插件会在javadoc和源码之前发生。还有其他人遇到这个问题吗? - Chris H.
显示剩余8条评论

68
丹提到的这篇文章还提到了另一种方法,可以不修改POM文件就能实现,而且不会很快被淘汰:

mvn clean javadoc:jar source:jar install

在Maven 3+版本中可以正常工作并且配合以下命令也可以使用:

mvn clean javadoc:jar source:jar deploy

我已经测试过Jenkins部署到Nexus使用这种方法非常好用,因为我只需要修改一些Jenkins任务而不需要修改我的POM文件。

5
谢谢提供无需POM文件的解决方案!请注意,在执行installdeploy前必须出现javadoc:jar和/或source:jar,否则额外的jar包将无法“附加”到部署中。 - seanf
2
FWIW,这些选项也适用于“package”:mvn clean javadoc:jar source:jar package - ecoe
这是一个好答案,因为它告诉你确切的命令来构建和上传源代码和Javadoc到你的仓库。 - joninx

50

5
我想提及的是,在未来的Maven版本(可能是Maven-4)中,这个功能可能会被取消。请查看Maven Super POM文件中的配置部分,在此处的注释中进行了说明:http://maven.apache.org/ref/3.1.1/maven-model-builder/super-pom.html - Dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接