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


问题

  • 团队其他成员(例如:小明)维护了一个公用的 jar ,例如:com.jar ,在他的 pom 中 com 的 version 带有 SNAPSHOT,例如:<version>0.0.1-SNAPSHOT</version>
  • 然后当别人使用小明维护的 com.jar 时,dependency 的version 和小明写的一样<version>0.0.1-SNAPSHOT</version>,完整 dependency为 :<dependency> <groupId>com.A</groupId> <artifactId>com</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>,但是发现无论如何都无法引入,甚至如果 <groupId>com.A</groupId> 中的 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 文件的 <profiles><activeProfiles> 节点:如下,注意 profile id 的对应关系
...
 <profiles>
 ...
<profile>  
           <id>dev</id>  
           <repositories>  
               <repository>  
                   <id>nexus</id>  
                   <url>http://ip:port/nexus/content/groups/public/</url>  
                   <releases>  
                       <enabled>true</enabled>  
                   </releases>  
                   <snapshots>  
                       <enabled>true</enabled>  
                       <updatePolicy>always</updatePolicy>  
                       <checksumPolicy>warn</checksumPolicy>  
                   </snapshots>  
               </repository>  
           </repositories>  
           <pluginRepositories>  
               <pluginRepository>  
                   <id>nexus</id>  
                   <url>http://ip:port/nexus/content/groups/public</url>  
                   <releases>  
                       <enabled>true</enabled>  
                   </releases>  
                   <snapshots>  
                       <enabled>true</enabled>  
                       <updatePolicy>always</updatePolicy>  
                       <checksumPolicy>warn</checksumPolicy>  
                   </snapshots>  
               </pluginRepository>  
           </pluginRepositories>  
       </profile> 
 </profiles>
...
<activeProfiles>
   <activeProfile>dev</activeProfile>
 </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.plugins</groupId>
 <artifactId>maven-jar-plugin</artifactId>
 <version>2.4</version>
 <configuration>
 <archive>
 <manifest>
 <addClasspath>true</addClasspath>
 <mainClass>com.xxxx.Application</mainClass>
 <classpathPrefix>dependency/</classpathPrefix>
 <useUniqueVersions>false</useUniqueVersions>
 </manifest>
 </archive>
 </configuration>
 </plugin>

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

  • 但是有时候并不是每个人都特别好沟通;或者由于某些原因,确实无法调整;
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值