返回文章列表

将maven项目打包上传到私服

分类
标签
SilentBlade
SilentBlade
2024-03-20 2 分钟阅读 24 阅读

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

1. 配置私服认证信息

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

xml
<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

接下来,在项目的 pom.xml 文件中配置分发管理(distributionManagement)和源码打包插件。如果是多模块项目,可以直接在父级 pom.xml 中配置,子项目会自动继承这些设置。

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)自动判断发布到快照仓库还是正式仓库。
  • maven-source-plugin:用于在打包时生成项目源码 JAR 包,方便后续查看和调试。

3. 执行打包发布命令

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

  1. 打包项目:

    bash
    mvn clean package
    

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

  2. 发布到私服:

    bash
    mvn deploy
    

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

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

    bash
    mvn deploy -Dmaven.test.skip=true
    

    注意:

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

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

对于非 Maven 项目生成的 JAR 包,或者需要手动上传第三方 JAR 包到私服时,可以使用 deploy:deploy-file 命令。

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

bash
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 文件,可指定其路径。

示例:

bash
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

评论 0

使用 GitHub 身份参与讨论

可以先写评论,登录后草稿会自动恢复。

访
暂无评论,来发表第一条评论吧。