maven打包上传到私有仓库的实现步骤

 更新时间:2023年01月03日 08:39:15   作者:茁壮成长的凌大大  
这篇文章主要介绍了maven打包上传到私有仓库的实现步骤,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

1. 背景

最近有些自己制作的工具包,需要单独抽取出来之后,在打包的时候,同时上传到自己的maven私服仓库,供别人引用,并且还能够引用的时候看到源码。

但是,在上传的过程中总是失败不成功,特别上火。最后总算成功,记录下步骤,希望能够帮助到需要的人。

2. 步骤

先说下我的要求:

本地打包能够自动上传maven私服仓库。

别人引用后,能够看到源码及注释。

2.1 修改pom.xml

2.1.1 指定上传仓库地址

首先需要到自己项目里的pom.xml里添加下边一段

  <distributionManagement>
  <!--稳定版本的仓库地址,必须是允许上传的私服地址-->
        <repository>
            <id>releases</id>
            <url>http://maven.aaaaaa.com/nexus/content/repositories/thirdparty</url>
        </repository>
        <!--开发版本的仓库地址,必须是允许上传的私服地址-->
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <url>http://maven.aaaaaa.com/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
    </distributionManagement>

对于我们平时的项目版本号是类似XX-SNAPSHOT这种的,这类就是数据开发版本,这种上传私服后会以版本号+时间戳的形式递增,它上传必须要指定<snapshotRepository>地址。

上图中,id后边会说,这里的url的地址,是对应你仓库地址,你可以在浏览器里访问下类似http://maven.aaaaaa.com/nexus的地址,输入账号密码,登录后,如下图4对应的地址,就是:


需要注意的是,因为上图中,我们仓库有好几个,我是上传到了3对应的仓库,你可以根据你们实际的仓库地址来就行。

另外id对应的releases其实是与指定的maven配置文件conf/setttings.xml中对应,如下图所示:


如果对应的settings.xml里没有配置<servers>对应的标签,那也需要添加一下。

如下示例:

  <servers>
    <server>
    	<!--与2.1.1中的id值对应-->
        <id>releases</id>
        <!--账号密码需要与私服登录账号密码一致-->
        <username>admin</username>
        <password>znxd</password>
    </server>
  </servers>

还有,注意仓库的账号密码需要正确。

2.1.2 添加源码插件

上边的配置仅仅是指定仓库的地址,因为还需要让下载依赖的人,能够看到源码,因此还需要有一个插件,maven-source-plugin

再找到项目的pom.xml,添加如下插件:

<!-- 上传源码 -->
   <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.0.1</version>
        <configuration>
            <attach>true</attach>
        </configuration>
        <executions>
            <execution>
                <phase>compile</phase>
                <goals>
                    <goal>jar</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

最后,总结一下现在pom.xml新增的这俩东西的位置:

<project>
	<!-----------省略多余的依赖---------->
	<build>
        <plugins>
         <!-----------省略多余的plugin---------->
         <!-- 上传源码 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.0.1</version>
                <configuration>
                    <attach>true</attach>
                </configuration>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <distributionManagement>
        <repository>
            <id>releases</id>
            <url>http://maven.aaaaa.com/nexus/content/repositories/thirdparty</url>
        </repository>
    </distributionManagement>
</project>

注意:不能引用spring-boot-maven-plugin插件,这个插件一旦引入生效,就表示你当前做的jar包是一个可运行的包,而不是我们往私服上传的工具包了

2.2 命令执行

配置完成了之后,就可以执行命令了,这里可以通过两种命令实现,一种是开发工具idea里执行,另一种是通过环境变量的mvn命令。

注意,不管用下边哪种命令,都需要先注意版本号,如果私服里存在你这个版本的包,那肯定会打包上传不成功,可能会报错:Return code is: 400, ReasonPhrase: Bad Request

因此,别忘了改下版本。如下图所示:

2.2.1 idea中执行

如果你的开发工具是idea,其实eclipse也一样,建议用这种方式。  

在开发工具中,找到右侧的maven project,如下图所示:


  

最终的命令,其实是执行了clean deploy

如果执行完后出现大概下边的日志,说明成功了。

[INFO] Building jar:*******
[INFO] Installing ****  to  *****
[INFO] --- ****   Uploading:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

当然,也可以通过浏览器去访问下,找下是否仓库里有对应jar包。

2.2.2 mvn命令执行

如果想使用mvn命令,那就需要注意maven环境变量配置,这里不说咋配置mvn命令了,这里说下步骤和注意的地方。

首先,打开项目所在目录,通过`cmd打开当前目录,如下图所示:

执行命令如下:

mvn -s "C:\Program Files\apache-maven-3.5.011\conf\settings-154waiwang.xml" deploy

其中 -s--settings的缩写。

这里我也是被坑惨了,我一直以为,因为我在配置maven环境变量的时候,指定了maven_home/m2_home,我觉得,当我使用mvn命令时,会自动使用对应的settings.xml文件进行打包,然后并不是,所以为什么上边需要通过-s来指定下settings.xml才可以。

如果不指定的话,会报错Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1] ,大概是无权限的意思。看来应该是不指定的话,会走一个默认的文件,因为那个文件里没有对应的账号密码,因此会报错。

2.3 成功后的依赖

上传成功后,可以通过地址找一下,如下图即表示成功:

3. 扩展

比如你做这个依赖包,可能后边还会有更新的时候,但是如果以前的依赖包已经被别人使用,那不可能一个个的通知使用者,maven本身提供这种自动下载高版本的功能,只需要对version标签的值改一下。

如下:

<dependency>
     <groupId>com.agri</groupId>
     <artifactId>znxd-framework</artifactId>
     <version>[1.0,)</version>
 </dependency>

其中[1.0,)表示更新从1.0版本开始的最新包。这样有个好处就是,当你的扩展包更新成大于1.0的包时,使用人的工程里,会自动变更为最新的包。

这样你就可以在写错代码的时候,偷偷的自己更新成最新的包,避免尴尬。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java8中用foreach循环获取对象的index下标详解

    Java8中用foreach循环获取对象的index下标详解

    这篇文章主要给大家介绍了关于Java8中用foreach循环获取对象的index下标的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 如何简单使用mybatis注解

    如何简单使用mybatis注解

    之前我们介绍了使用JDBC或者java框架mabatis来实现对数据库的操作,现在为了简化代码,提高程序的简洁性,我们探索如何使用注解进行开发,需要的朋友可以参考下
    2021-06-06
  • Java中@RestController注解使用

    Java中@RestController注解使用

    在Spring框架中,@RestController注解是一个非常重要的注解,它用于将一个类标记为RESTful风格的控制器,本文就来介绍一下Java中@RestController注解使用,感兴趣的可以了解一下
    2023-11-11
  • Springboot自定义banner及验证过程

    Springboot自定义banner及验证过程

    这篇文章主要介绍了Springboot自定义banner及验证过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 解决java.util.NoSuchElementException异常正确方法

    解决java.util.NoSuchElementException异常正确方法

    java.util.NoSuchElementException是Java中的一种异常,表示在迭代器或枚举中找不到元素,这篇文章主要给大家介绍了关于解决java.util.NoSuchElementException异常的相关资料,需要的朋友可以参考下
    2023-11-11
  • Java Servlet上传图片到指定文件夹并显示图片

    Java Servlet上传图片到指定文件夹并显示图片

    在学习Servlet过程中,针对图片上传做了一个Demo,如果大家对Java Servlet上传图片到指定文件夹并显示图片功能感兴趣的朋友大家通过本文一起学习吧
    2017-08-08
  • java中ResultSet遍历数据操作

    java中ResultSet遍历数据操作

    这篇文章主要介绍了java中ResultSet遍历数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 使用postman传递list集合后台springmvc接收

    使用postman传递list集合后台springmvc接收

    这篇文章主要介绍了使用postman传递list集合后台springmvc接收的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java访问者设计模式详细讲解

    Java访问者设计模式详细讲解

    大多数情况下你不需要访问者模式,但当一旦需要访问者模式时,那就是真的需要它了,这是设计模式创始人的原话。可以看出应用场景比较少,但需要它的时候是不可或缺的,这篇文章就开始学习最后一个设计模式——访问者模式
    2022-11-11
  • idea的使用之关于tomcat热部署的教程

    idea的使用之关于tomcat热部署的教程

    这篇文章主要介绍了idea的使用之关于tomcat热部署的教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09

最新评论