You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven多模块项目无法正确部署至Maven Central求助

解决Maven多模块项目上传到Maven Central仅主pom上传的问题

我遇到过好几个类似的多模块Maven部署问题,大概率是下面几个配置点你没注意到:

1. 父项目必须设置正确的packaging类型

这是最容易忽略的核心点!因为你的项目改成了多模块结构,主项目(父pom)的packaging必须设为pom,否则Maven会把它当成普通的jar项目处理,不会递归触发子模块的部署流程。

在主项目的pom.xml里添加:

<packaging>pom</packaging>

同时确保主pom里正确声明了所有子模块:

<modules>
  <module>子模块1的目录名</module>
  <module>子模块2的目录名</module>
</modules>

2. 统一配置源码和Javadoc插件并绑定到构建阶段

子模块target里生成了源码和javadoc jar但没上传,说明这些jar没有被Maven的deploy流程识别为需要上传的附件。你需要在父pom里统一配置maven-source-plugin和maven-javadoc-plugin,并绑定到构建阶段,让每个子模块自动生成并附加这些jar到部署流程中。

在父pom的<build><pluginManagement>里添加:

<plugins>
  <!-- 生成并附加源码jar -->
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>3.2.1</version>
    <executions>
      <execution>
        <id>attach-sources</id>
        <goals>
          <goal>jar-no-fork</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <!-- 生成并附加Javadoc jar -->
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>3.4.1</version>
    <executions>
      <execution>
        <id>attach-javadocs</id>
        <goals>
          <goal>jar</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

子模块的pom只需要继承父pom即可,不需要重复配置这些插件——pluginManagement会自动把配置传递给所有子模块。

3. 确保在根目录执行deploy命令

不要单独进入子模块目录执行mvn deploy,这样Maven只会处理当前子模块,还可能因为缺少父pom的上下文配置导致上传失败。必须在主项目的根目录执行:

mvn clean deploy -DskipTests

这样Maven会递归处理所有子模块,把每个模块的jar、源码jar、javadoc jar和pom都同步上传到Maven Central。

4. 检查Nexus Staging插件的配置

如果你用Sonatype的Nexus Staging插件(nexus-staging-maven-plugin)发布到Maven Central,要确保这个插件在父pom里配置,并且开启<extensions>true</extensions>,这样它能正确处理多模块项目的 staging 和发布流程:

<plugin>
  <groupId>org.sonatype.plugins</groupId>
  <artifactId>nexus-staging-maven-plugin</artifactId>
  <version>1.6.13</version>
  <extensions>true</extensions>
  <configuration>
    <serverId>ossrh</serverId>
    <nexusUrl>https://oss.sonatype.org/</nexusUrl>
    <autoReleaseAfterClose>true</autoReleaseAfterClose>
  </configuration>
</plugin>

这个配置也要放在父pom的pluginManagement里,让子模块继承。

5. 排查子模块是否禁用了deploy流程

检查子模块的pom里有没有意外添加跳过deploy的配置,比如:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-deploy-plugin</artifactId>
  <configuration>
    <skip>true</skip>
  </configuration>
</plugin>

如果有,删掉这个配置即可。

按照上面的步骤检查一遍,应该就能解决子模块源码和javadoc不上传的问题了。

内容的提问来源于stack exchange,提问作者renken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:18:34