本文将详细介绍如何配置Maven项目,以便将其打包并发布到私有Maven仓库(如Nexus),包括自动发布和手动发布两种方式。

1. 配置私服认证信息

首先,你需要在Maven的 settings.xml 文件中配置私服的用户名和密码。这个文件通常位于 ~/.m2/ 目录下。

<servers>
    <!-- 配置发布到 Release 仓库的认证信息 -->
    <server>
        <username>deployment</username>
        <password>deploy123</password>
        <id>nexus-release</id> <!-- 对应 pom.xml 中 release 仓库的 ID -->
    </server>
    <!-- 配置发布到 Snapshot 仓库的认证信息 -->
    <server>
        <username>deployment</username>
        <password>deploy123</password>
        <id>nexus-snapshots</id> <!-- 对应 pom.xml 中 snapshot 仓库的 ID -->
    </server>
</servers>

说明:

  • <id> 标签的值(例如 nexus-releasenexus-snapshots)必须与后续在项目 pom.xml 中配置的仓库ID保持一致。
  • usernamepassword 是你在私服(如Nexus)中为部署用户设置的凭据。

2. 配置项目 pom.xml

接下来,在你的Maven项目的 pom.xml 文件中配置分发管理(distributionManagement)和源码打包插件。如果你的项目有父级 pom.xml,则可以在父级 pom.xml 中进行配置,子项目将继承这些设置。

<distributionManagement>
    <!-- Release 仓库配置 -->
    <repository>
        <id>nexus-release</id> <!-- 必须与 settings.xml 中的 server ID 对应 -->
        <url>http://192.168.0.247/nexus/content/repositories/releases/</url>
    </repository>
    <!-- Snapshot 仓库配置 -->
    <snapshotRepository>
        <id>nexus-snapshots</id> <!-- 必须与 settings.xml 中的 server ID 对应 -->
        <url>http://192.168.0.247/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
</distributionManagement>

<build>
    <plugins>
        <!-- 用于生成项目源码包的插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <attach>true</attach> <!-- 确保源码包被附加到构建中 -->
            </configuration>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <!-- 在 package 阶段执行,生成源码 JAR 包 -->
                    <phase>package</phase>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

说明:

  • distributionManagement:定义了项目发布到远程仓库的配置。
    • repository:用于发布正式版本(Release)的仓库。
    • snapshotRepository:用于发布快照版本(Snapshot)的仓库。
  • Maven会根据项目 pom.xml<version> 的后缀(例如 0.0.1-SNAPSHOT)自动判断是发布到 snapshotRepository 还是 repository
  • maven-source-plugin:这个插件用于在打包时生成项目的源码JAR包,方便其他开发者查看和调试。

3. 执行打包发布命令

配置完成后,你可以通过Maven命令来打包并发布项目:

  1. 打包项目:

    mvn clean package
    

    此命令会清理项目并编译、打包生成JAR/WAR文件到项目的 target 目录下。

  2. 发布到私服:

    mvn deploy
    

    此命令会将项目(包括主JAR包和源码JAR包)发布到 pom.xml 中配置的私服仓库。Maven会根据项目的版本号自动选择发布到 release 仓库或 snapshot 仓库。

  3. 跳过测试并发布:
    如果你想在发布时跳过单元测试,可以使用以下命令:

    mvn deploy -Dmaven.test.skip=true
    

    注意:

    • mvn install 命令会将项目安装到本地Maven仓库 (~/.m2/repository)。
    • mvn deploy 命令则会将项目发布到远程私服仓库。

4. 手动打包发布(针对非Maven项目或特定JAR包)

对于非Maven项目生成的JAR包,或者需要手动上传某个特定的JAR包到私服,可以使用 deploy:deploy-file 命令:

在JAR包所在的目录或任意位置执行以下命令:

mvn deploy:deploy-file \
-DgroupId=[0] \
-DartifactId=[1] \
-Dversion=[2] \
-Dpackaging=jar \
-Dfile=[3] \
-Durl=[4] \
-DrepositoryId=[5] \
-DpomFile=[6]

参数说明:

  • [0]: groupId,项目的组织ID。
  • [1]: artifactId,项目的构件ID。
  • [2]: version,项目的版本号。
  • [3]: file,要上传的JAR包的完整路径或文件名。
  • [4]: url,私服仓库的URL地址。
  • [5]: repositoryId,私服仓库的ID,必须与 settings.xml 中配置的 server ID 对应。
  • [6]: pomFile,可选参数,如果该JAR包有对应的POM文件,可以指定其路径。

示例:

mvn deploy:deploy-file -DgroupId=com.alipay.sdk -DartifactId=alipay-sdk-java -Dversion=4.1.17.ALL -Dpackaging=jar -Dfile=alipay-sdk-java-4.17.9.ALL.jar -Durl=http://172.16.1.22:8081/nexus/content/repositories/snapshots -DrepositoryId=Snapshots -DpomFile=alipay-sdk-java-4.17.9.ALL.pom