maven SNAPSHOT jar 包 带时间戳,引用问题

文章目录

  • 问题
  • 原因
  • 解决
    • 手动下载,手动安装
    • setting.xml
    • 让小明调整一下


问题

  • 团队其他成员(例如:小明)维护了一个公用的 jar ,例如:com.jar ,在他的 pom 中 com 的 version 带有 SNAPSHOT,例如:0.0.1-SNAPSHOT
  • 然后当别人使用小明维护的 com.jar 时,dependency 的version 和小明写的一样0.0.1-SNAPSHOT,完整 dependency为 : com.A com 0.0.1-SNAPSHOT ,但是发现无论如何都无法引入,甚至如果 com.A 中的 A 是一个新的路径时,在使用者本地仓库中都无法创建;

原因

  • 小明在自己的开发环境执行 mvn deploy命令,将 com 公用jar 发布到私服,maven 会自动替换 SNAPSHOT 为 deploy 命令执行时的时间戳;
  • 其他人引用时 需要一个 com-0.0.1-SNAPSHOT.jar 的包,实际上 在私服 /0.0.1-SNAPSHOT 目录下是没有的,会报错;

解决

手动下载,手动安装

  • 1、手动下载私服 /0.0.1-SNAPSHOT 目录下最新版的 jar;
  • 2、执行命令:mvn install:install-file -DgroupId=com.A-DartifactId=com -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar -Dfile=/path/com-xxxx.jar
  • 优点:快速修复,过程可控
  • 缺点:小明再次更新 com 公用jar 时,需要再次执行以上两步,否则无法使用最新的jar;

setting.xml

  • 修改 setting.xml 文件的 节点:如下,注意 profile id 的对应关系
...
 <profiles>
 ...
<profile>  
           <id>devid>  
           <repositories>  
               <repository>  
                   <id>nexusid>  
                   <url>http://ip:port/nexus/content/groups/public/url>  
                   <releases>  
                       <enabled>trueenabled>  
                   releases>  
                   <snapshots>  
                       <enabled>trueenabled>  
                       <updatePolicy>alwaysupdatePolicy>  
                       <checksumPolicy>warnchecksumPolicy>  
                   snapshots>  
               repository>  
           repositories>  
           <pluginRepositories>  
               <pluginRepository>  
                   <id>nexusid>  
                   <url>http://ip:port/nexus/content/groups/publicurl>  
                   <releases>  
                       <enabled>trueenabled>  
                   releases>  
                   <snapshots>  
                       <enabled>trueenabled>  
                       <updatePolicy>alwaysupdatePolicy>  
                       <checksumPolicy>warnchecksumPolicy>  
                   snapshots>  
               pluginRepository>  
           pluginRepositories>  
       profile> 
 profiles>
...
<activeProfiles>
   <activeProfile>devactiveProfile>
 activeProfiles>
 ...
  • 其中:updatePolicy 为更新snapshot包的频率,属性有四个值always(实时更新) ;daily(每天更新); interval:xxx(隔xxx分钟更新一次) ; never(从不更新) 默认为daily;具体可参加官网
  • 这个配置会自动下载私服中最新的那一版jar,以后也会自己更新;
  • 优点:自动更新;
  • 缺点:我不知道,我猜测,可能 对profile有什么影响,后续发现我会补上。。。

让小明调整一下

  • 其实问题本就出在小明那边,他进行了一种非推荐或者叫非正规操作;给别人用就应该是 release 版本;
  • 那方法就很多了,例如执行 deploy 时加上 DuseUniqueVersions=false ,这样 mvn deploy -DuseUniqueVersions=false;或者在pom中配置
<plugin>
 <groupId>org.apache.maven.pluginsgroupId>
 <artifactId>maven-jar-pluginartifactId>
 <version>2.4version>
 <configuration>
 <archive>
 <manifest>
 <addClasspath>trueaddClasspath>
 <mainClass>com.xxxx.ApplicationmainClass>
 <classpathPrefix>dependency/classpathPrefix>
 <useUniqueVersions>falseuseUniqueVersions>
 manifest>
 archive>
 configuration>
 plugin>

以上配置参考:https://blog.csdn.net/quliuwuyiz/article/details/79363826,并未验证

  • 但是有时候并不是每个人都特别好沟通;或者由于某些原因,确实无法调整;

你可能感兴趣的:(java)