关于java:聊聊项目打包发布到maven私仓常见的几种方式

4次阅读

共计 3303 个字符,预计需要花费 9 分钟才能阅读完成。

前言

在晚期没有应用 maven 之前,咱们援用一些私有 jar 或者 api jar,咱们可能会采纳这样的形式,通过手动导入这些 jar 到我的项目的 classpath 门路进行援用。

有了 maven 后,咱们公司外部可能就会搭建 maven 私仓比方 nexus,而后把这些私有 jar 或者 api jar 上传到 nexus 私仓,在 pom.xml 配置一下这些 jar 的坐标就能够援用。

明天咱们的话题就是来聊聊我的项目打包公布到 maven 私仓常见的几种形式

公布到 maven 私仓的步骤

1. 在 maven 的 settings.xml 中 < servers > 节点配置用户名和明码,形如下:

<servers>
    <server>
      <id>nexus-releases</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
    <server>
      <id>nexus-snapshots</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
    </servers>

注: 其中 id 可先看做是一个标识。username 和 password 为 nexus 私仓的用户名和明码

2、指定公布到 nexus 私仓的 url 并进行公布

形式一:pom.xml 文件增加 distributionManagement 节点

形如下:

 <distributionManagement>
         <!-- 正式版本 -->
        <repository>
            <!-- 在 settings.xml 中 <server> 的 id-->
            <id>nexus-releases</id>
            <url>http://192.168.0.11:8081/nexus/content/repositories/releases/</url>
        </repository>

         <!-- 快照版本 -->
        <snapshotRepository>
             <id>nexus-snapshots</id>
             <url>http://192.168.0.11:8081/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

注:

  • 如果存在 parent,只需在 parent 中的 pom.xml 中配置,没有则在本我的项目的 pom.xml 配置即可
  • < repository > 节点下的 < id > 对应 maven 的配置文件 settings.xml 文件中的 server 的 id,两者必须保持一致
  • 上传到私仓的是正式版本还是快照版本,取决于 pom.xml 文件 version 中是 SNAPSHOT 还是 RELEASE。比方你我的项目中配置如下
<groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>

则上传到私仓的就是快照版本

最初执行 maven 的 deploy 命令进行公布

形式二:在 maven 的 settings.xml 中 < profiles > 节点配置 < properties >,并在 < properties > 指定 < altSnapshotDeploymentRepository > 和 < altReleaseDeploymentRepository >

形如下:

<profiles>
     <profile>
     <id>nexus</id>
     <properties>
         <altSnapshotDeploymentRepository>
             nexus-snapshots::default::http://192.168.0.11:8081/repository/maven-snapshots/
         </altSnapshotDeploymentRepository>
         <altReleaseDeploymentRepository>
            nexus-releases::default::http://192.168.0.11:8081/repository/maven-releases/
         </altReleaseDeploymentRepository>
     </properties>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>nexus</activeProfile>
  </activeProfiles>

注:

  • nexus-snapshots 和 nexus-releases 要和 maven 的配置文件 settings.xml 文件中的 server 的 id,两者必须保持一致
  • 属性 altSnapshotDeploymentRepository 和 altReleaseDeploymentRepository 是随 maven-release-plugin 2.8 版一起引入的。低于 2.8 版本,执行 mvn deploy 时,则会报如下谬误
Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter

解决方案就是在公布的我的项目中指定一下 2.8 版本以上的插件,形如下

<build>
        <plugins>
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
            </plugin>
        </plugins>
    </build>

最初再执行 maven 的 deploy 命令进行公布

形式三:通过 mvn deploy 指定参数

  • 办法一:通过 - D 参数指定 altSnapshotDeploymentRepository 和 altReleaseDeploymentRepository

形如下

mvn deploy -DskipTests -DaltSnapshotDeploymentRepository=nexus-snapshots::default::https://YOUR_NEXUS_URL/snapshots
-DaltReleaseDeploymentRepository=nexus-releases::default::https://YOUR_NEXUS_URL/releases

同理上述命令要执行胜利,得确保 deploy 插件是基于 2.8 版本以上

  • 办法二:通过 - D 指定要公布的 jar 的相干信息以及私仓地址,私仓 id,私仓 id 要和 settings.xml 文件中的 server 的 id 保持一致

形如下

mvn deploy:deploy-file -DskipTests -Dfile=jar 包文件地址, 绝对路径  -DgroupId= 组名 -DartifactId= 项目名称 -Dversion= 版本号 -Dpackaging=jar -DrepositoryId= 私库 id(和 setting.xml 文件中的 server 的 id 保持一致)-Durl= 私仓地址 

形式四:通过 nexus 的可视化界面进行上传 jar 公布

如下图

这几种公布形式的抉择

形式一,通过 distributionManagement 这种形式公布,可能是大多数人的抉择。但如果要公布的我的项目很多,咱们就能够思考应用形式二,通过在全局的 settings 文件配置 altSnapshotDeploymentRepository 和 altReleaseDeploymentRepository 进行公布,只需配置一次,所有我的项目就都能够公布,无需在多个我的项目 pom 指定

形式一和形式二比拟适宜公司本人外部开发我的项目,对于一些第三方提供的 jar,举荐应用 mvn deploy -DrepositoryId= 私库 id(和 settings.xml 文件中的 server 的 id 保持一致)-Durl= 私仓地址的形式或者间接应用 nexus 可视化界面上传的形式

正文完
 0