maven依赖库和发布库配置

迁移库

制品库和依赖库迁移地址:arttest.maven.com.cn

该制品库中已经将老的制品库中的public-maven-remote库迁移过来,部分依赖可以通过该库进行下载。

新建了一个部门的maven库vas-release-maven,存放远程库无法下载的平台提供jar包,平台提供的jar直接使用maven坐标是无法在maven库中进行,可以先把该jar包deploy到vas-release-maven库中,然后使用坐标在maven 中依赖就可以了。为了方便开发人员引用,已要求制品库管理员为我们创建了一个虚库vas-maven-virtual,该库关联了vas-release-maven和public-maven-remote两个库。使用该库就可以实现maven远程库和本地部门库的双层引用,两全其美。

maven依赖库配置

由于切换了制品库,需要将maven的settings.xml文件中配置的仓库地址进行修改.(建议该配置仅在settings.xml中,将每个工程的pom.xml相关配置去除)

  <profiles>
    <profile>
      <repositories>
        <repository>
          <snapshots>
            <enabled>falseenabled>
          snapshots>
          <id>centralid>
          <name>vas-maven-virtualname>
          <url>https://arttest.maven.com.cn:443/artifactory/vas-maven-virtualurl>
        repository>
        <repository>
          <snapshots />
          <id>snapshotsid>
          <name>vas-maven-virtualname>
          <url>https://arttest.maven.com.cn:443/artifactory/vas-maven-virtualurl>
        repository>
      repositories>
      <pluginRepositories>
        <pluginRepository>
          <snapshots>
            <enabled>falseenabled>
          snapshots>
          <id>centralid>
          <name>vas-maven-virtualname>
          <url>https://arttest.maven.com.cn:443/artifactory/vas-maven-virtualurl>
        pluginRepository>
        <pluginRepository>
          <snapshots />
          <id>snapshotsid>
          <name>vas-maven-virtualname>
          <url>https://arttest.maven.com.cn:443/artifactory/vas-maven-virtualurl>
        pluginRepository>
      pluginRepositories>
      <id>artifactoryid>
    profile>
  profiles>
  <activeProfiles>
    <activeProfile>artifactoryactiveProfile>
  activeProfiles>

maven发布库配置

部分项目可能会开发二方库,给其他项目使用,之前的做法可能有以下两点:

  1. 项目发布一个jar包,然后其他项目把该jar包拿过来使用(每次升级都要对该jar进行替换)。
  2. 项目发布jar包,手动上传到公共库vas-release-maven中(每次升级均需要手动上传),其他项目使用该jar时直接通过坐标使用。

如之前在某个项目开发过类似服务注册的starter模块,该模块为每个微服务提供注册服务信息的功能。以往的做法是register模块作为单独的工程开发,与主版本不在同一个基线下。每次修改register模块,均需要将该jar包放到主版本基线的lib目录下,在主版本编译时手动执行mvn clean install方法将该jar安装在本地maven仓库中。

这是一种比较容易想到的但是却是比较麻烦的一种方法。

这里提供了一个方法,可以在二方库开发时,直接发布到vas-release-maven中,在修改完register模块后直接执行mvn clean deploy命令进行发布。主版本不用做任何修改,仍然通过坐标的方式就可以引用到修改后的模块包。

这里需要增加两个配置

  1. 需要在待发布工厂的pom.xml文件中增加发布库的配置如下:
    <distributionManagement>
        <repository>
            <id>centralid>
            <name>arttest-releasesname>
            <url>https://arttest.maven.com.cn:443/artifactory/vas-release-mavenurl>
        repository>
        <snapshotRepository>
            <id>snapshotsid>
            <name>arttest-snapshotsname>
            <url>https://arttest.maven.com.cn:443/artifactory/vas-release-mavenurl>
        snapshotRepository>
    distributionManagement>
  1. 需要在maven的配置文件settings.xml中配置发布库的认证信息,也就是你要有可以发布的权限,,注意这里的id配置必须和上面的一直,否则发布时会报认证失败的错误.
  <servers>
    <server>
	  <id>centralid>
	  <username>10191192username>
	  <password>******password>
    server>
  
    <server>
	  <id>snapshotsid>
	  <username>10191192username>
	  <password>******password>
    server>
  servers>

但是这个地方存在一个问题是,当主版本从远程仓库中拉取register模块后,会在本地库中缓存,此时如果register模块更新发布,那如何在主版本中每次取到的都是远程库中最新的呢?这就涉及到mavn的机制了:仓库一般分为public(Release)仓和SNAPSHOT仓,前者存放正式版本,后者存放快照版本。如果在项目配置文件中(无论是build.gradle还是pom.xml)指定的版本号带有’-SNAPSHOT’后缀,那么打出的包就是一个快照版本。快照版本和正式版本的主要区别在于,本地获取这些依赖的机制有所不同。

假设有两个小组负责维护两个组件,example-service和example-ui,其中example-ui项目依赖于example-service。而这两个项目每天都会构建多次,如果每次构建你都要升级example-service的版本,那么你会疯掉。这个时候SNAPSHOT版本就派上用场了。每天日常构建时你可以构建example-service的快照版本,比如example-service-1.0-SNAPSHOT.jar,而example-ui依赖该快照版本。每次example-ui构建时,会优先去远程仓库中查看是否有最新的example-service-1.0-SNAPSHOT.jar,如果有则下载下来使用。即使本地仓库中已经有了example-service-1.0-SNAPSHOT.jar,它也会尝试去远程仓库中查看同名的jar是否是最新的。有的人可能会问,这样不就不能充分利用本地仓库的缓存机制了吗?别着急,Maven比我们想象中的要聪明。在配置Maven的Repository的时候中有个配置项,可以配置对于SNAPSHOT版本向远程仓库中查找的频率。频率共有四种,分别是always、daily、interval、never。当本地仓库中存在需要的依赖项目时,always是每次都去远程仓库查看是否有更新,daily是只在第一次的时候查看是否有更新,当天的其它时候则不会查看;interval允许设置一个分钟为单位的间隔时间,在这个间隔时间内只会去远程仓库中查找一次,never是不会去远程仓库中查找(这种就和正式版本的行为一样了)

<repository>
    <id>myRepositoryid>
    <url>...url>
    <snapshots>
        <enabled>trueenabled>
        <updatePolicy>XXXupdatePolicy>
    snapshots>
repository>

你可能感兴趣的:(maven)