直接在子模块pom.xml的<build><plugins>中配置maven-source-plugin并执行mvn deploy,才能将sources.jar与主jar一同发布到私服;多模块项目中父pom仅用<pluginManagement>声明无效,且需确保<distributionManagement>和settings.xml中server凭据配置正确。

直接在项目的 pom.xml 中配置 maven-source-plugin,再执行 mvn deploy 即可把源码包(sources.jar)和主 jar 一起发布到私服。关键不是加插件本身,而是让它正确绑定生命周期、适配多模块结构,并确保私服地址和认证可用。
插件配置要写在具体模块的 pom.xml 里
多模块项目中,不能只在父 pom 的 <pluginManagement> 里声明,必须在每个需要发布源码的子模块的 <build><plugins> 中显式引入插件。否则 mvn deploy 不会生成或上传 sources.jar。
- 推荐写法(简洁可靠,无需指定 phase,默认绑定到
package):
<plugin><br> <groupId>org.apache.maven.plugins</groupId><br> <artifactId>maven-source-plugin</artifactId><br> <version>3.3.1</version><br> <executions><br> <execution><br> <id>attach-sources</id><br> <goals><goal>jar</goal></goals><br> </execution><br> </executions><br></plugin>
- 如果想更明确控制时机,可显式指定
<phase>package</phase>;不建议设为compile,容易因编译未完成导致打包失败。
确保私服地址和认证已配置
仅插件配置不够,私服仓库地址 和 登录凭据 必须到位,否则 deploy 会报 401 或 403 错误。
立即学习“Java免费学习笔记(深入)”;
-
<distributionManagement>要写在当前模块的 pom.xml 中(或继承自父 pom),示例:
<distributionManagement><br> <repository><br> <id>nexus-releases</id><br> <url>https://nexus.example.com/repository/maven-releases/</url><br> </repository><br> <snapshotRepository><br> <id>nexus-snapshots</id><br> <url>https://nexus.example.com/repository/maven-snapshots/</url><br> </snapshotRepository><br></distributionManagement>
-
settings.xml中对应<id>(如nexus-releases)需配置 server 凭据:
<server><br> <id>nexus-releases</id><br> <username>deploy-user</username><br> <password>xxx</password><br></server>
执行命令要选对
源码包是伴随主构件一起构建和发布的,不需要单独运行 source 命令(除非调试)。
- 日常发布:直接
mvn clean deploy—— 它会触发package阶段(生成 sources.jar),再上传所有产物(jar、sources.jar、pom)到私服。 - 仅本地安装(供本机其他项目引用):用
mvn clean install,sources.jar 会进本地仓库~/.m2/repository/...。 - 调试源码打包是否生效:可先跑
mvn source:jar看 target/ 下是否生成了xxx-sources.jar,再确认 deploy 是否连带上传。
验证是否成功
发布完成后,去私服 Web 页面(如 Nexus 或 Artifactory)找到对应坐标的版本,检查是否包含以下两个文件:
-
xxx-1.2.3.jar(主构件) -
xxx-1.2.3-sources.jar(源码包) - IDE(如 IntelliJ)中引用该依赖后,按 Ctrl+Click 进入类定义时,应能直接看到原始 Java 源码和注释,而非反编译结果。


















