ChatGPT解决这个技术问题 Extra ChatGPT

如何使用源代码和 JavaDoc 部署 SNAPSHOT?

我想用我的快照部署源代码和 javadocs。这意味着我想自动化以下命令:

mvn clean source:jar javadoc:jar deploy

只需执行:

mvn clean deploy

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

我知道 source/javadoc 插件可以与 release 插件的执行同步,但我不知道如何将它连接到快照版本。


s
simon04
<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's OSS parent POM


我正在使用此设置,并且效果很好。但是我有两个小问题:第一,生成的源不包含在“jar”目标中,您需要“jar-no-fork”。二、发布插件有一个bug,会导致两次生成发布源(因此部署了两次,这会导致仓库管理器出现问题)
默认情况下,maven-source-plugin:jar 附加到 package 阶段,因此您可以离开 <phase>verify</phase> 并完成同样的事情。此外,我不确定您为什么要附加此内容以进行验证,因为该阶段旨在“打包项目并运行集成测试”。
@mglauche @matt 感谢您的评论。我刚刚进行了适当的更改。
@Henryk 好的,我已经明确添加了 maven-deploy-plugin 以及 maven 似乎(或尝试)以保证在 POM 中定义插件时执行。不过,它可能需要一些实验。
使用随机 id 创建新的执行我认为你会想要“重新映射”默认的一个执行
D
Dave

Dan 提到的文章还提到了另一种无需修改 pom 且不会很快消失的方法:

mvn clean javadoc:jar source:jar install

这适用于 Maven 3+,以及...

mvn clean javadoc:jar source:jar deploy

我已经从 Jenkins 部署到 Nexus 进行了测试。

这种方法很好,因为我只需要修改一些 Jenkins 工作,而不需要弄乱我的 poms。


感谢您提供无绒毛的解决方案!请注意,javadoc:jar 和/或 source:jar 必须在安装或部署之前出现,否则额外的 jar 将不会“附加”到部署中。
FWIW 这些选项也适用于 packagemvn clean javadoc:jar source:jar package
这是一个很好的答案,因为它告诉您构建和上传源代码和 javadoc 到您的存储库的确切命令。
D
Dan

只是添加一个不需要您使用插件配置的替代方案:

mvn -DperformRelease=true [goals]

http://sea36.blogspot.com/2009/02/attaching-javadocs-and-sources-to-maven.html?showComment=1314177874102#c6853460758692768998 归功于 mcbeelen


我想提一下,这个功能可能会在未来的 Maven 版本(可能是 Maven-4?)中消失。在 Maven Super POM 的配置文件部分查看评论:maven.apache.org/ref/3.1.1/maven-model-builder/super-pom.html