精华内容
下载资源
问答
  • maven传递依赖的版本确定规则,也就是对重复的间接依赖的包的选择规则: 1. 在工程的依赖树上,深度越浅,越被优先选择。如本例中的spring-jms. 由于pom中直接声明了3.0.2版本的spring-jms,所以3.0.2版本的...

     

    maven传递依赖的版本确定规则,也就是对重复的间接依赖的包的选择规则:

     

     

    1. 在工程的依赖树上,深度越浅,越被优先选择。如本例中的spring-jms. 由于pom中直接声明了3.0.2版本的spring-jms,所以3.0.2版本的spring-jms在工程的依赖树上处在第一层,而activemq-optional所间接依赖的3.0.3版本的spring-jms则是处在工程依赖树的第二层,则maven会以深度浅者优先,所以最后解析的结果是选择了3.0.2版本的spring-jms。


      2. 若两个依赖包处于依赖树上的同一层,则谁在前,选择谁。如本例中的spring-core.一个是activemq-optional的间接依赖,一个是spring-context的间接依赖,两个依赖都是处在第二层上,但由于是activemq-optional声明在前,所以maven优先选择了activemq-optional所依赖的3.0.3的版本!

     

      3. 避免传递依赖引起版本问题的最佳实践。现在很多的开源框架和工具都开始分模块打包发布,比如spring,hibernate都是如此,而这些模块之间又有可能存在相关的依赖关系,为了避免出现版本不一致问题,比如上例中出现的spring-jms使用的是3.0.2,而spring-core却使用了3.0.3这种情况,需要我们对一个工程直接依赖的某一框架的多个模块都要做出声明,而不要依赖其内部的依赖关系来间接引入。总结起来就昌:一般来说,如果工程直接依赖到某一框架的多个模块,最好全部声明这些依赖。

     

     

     

     

    展开全文
  • maven如何确定想选择的包的版本

    千次阅读 2019-06-14 21:22:08
    <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>??</version>...一般情况下自己开发还是用最新版本的好 ...
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>??</version>
    </dependency>

    一般情况下自己开发还是用最新版本的好

    但是maven中的有些jar包不同版本内的函数命名不同

    所以我们在网上用别人的代码的时候,也需要导入别人所用到的jar包版本

    maven暂时没有自动推荐dependency的version这一功能,没有,没有,没有...

    展开全文
  • 转载:理解MavenSNAPSHOT版本和正式版本 Maven中建立依赖管理方式基本已成为Java语言依赖管理事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制。 在Maven依赖管理中,唯一标识一个依赖项是由...

    转载:理解Maven中的SNAPSHOT版本和正式版本

    Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制。
    在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个属性构成的,分别是groupId、artifactId以及version。
    这三个属性可以唯一确定一个组件(Jar包或者War包)。

    其实在Nexus仓库中,一个仓库一般分为public(Release)仓和SNAPSHOT仓,

    前者存放正式版本,后者存放快照版本。
    snapshot快照仓库用于保存开发过程中的不稳定版本,
    release正式仓库则是用来保存稳定的发行版本。

    如果在项目配置文件中(无论是build.gradle还是pom.xml)指定的版本号带有’-SNAPSHOT’后缀(注意必须为全大写),比如版本号为’Junit-4.10-SNAPSHOT’,那么打出的包就是一个快照版本。

    snapshot快照仓库和release发布仓库区别:

    快照版本和正式版本的主要区别在于,本地获取这些依赖的机制有所不同。

    假设你依赖一个库的正式版本,构建的时候构建工具会先在本次仓库中查找是否已经有了这个依赖库,如果没有的话才会去远程仓库中去拉取。
    所以假设你发布了Junit-4.10.jar到了远程仓库,有一个项目依赖了这个库,它第一次构建的时候会把该库从远程仓库中下载到本地仓库缓存,
    以后再次构建都不会去访问远程仓库了。所以如果你修改了代码,向远程仓库中发布了新的软件包,但仍然叫Junit-4.10.jar,
    那么依赖这个库的项目就无法得到最新更新。你只有在重新发布的时候升级版本,比如叫做Junit-4.11.jar,
    然后通知依赖该库的项目组也修改依赖版本为Junit-4.11,这样才能使用到你最新添加的功能。

    这种方式在团队内部开发的时候会变的特别蛋痛。
    假设有两个小组负责维护两个组件,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是否是最新的。

    snapshot快照仓库的查找机制

    有的人可能会问,这样不就不能充分利用本地仓库的缓存机制了吗?别着急,Maven比我们想象中的要聪明。
    在配置Maven的Repository的时候中有个配置项,可以配置对于SNAPSHOT版本向远程仓库中查找的频率。
    频率共有四种,分别是always、daily、interval、never。当本地仓库中存在需要的依赖项目时,

    • always是每次都去远程仓库查看是否有更新,
    • daily是只在第一次的时候查看是否有更新,当天的其它时候则不会查看;
    • interval允许设置一个分钟为单位的间隔时间,在这个间隔时间内只会去远程仓库中查找一次,
    • never是不会去远程仓库中查找(这种就和正式版本的行为一样了)。

    Maven版本的配置方式为:

    <repository>
        <id>myRepository</id>
        <url>...</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>XXX</updatePolicy>
        </snapshots>
    </repository>
    

    其中updatePolicy就是那4种类型之一。

    如果配置间隔时间更新,可以写作 interval:XX (XX是间隔分钟数)。daily配置是默认值。

    而在Gradle,可以设置本地缓存的更新策略。

    configurations.all {
        // check for updates every build
        resolutionStrategy.cacheChangingModulesFor  0,'seconds'
    }
    

    当然也可以按照分钟或者小时来设置.

    configurations.all {
        resolutionStrategy.cacheChangingModulesFor  10, ‘minutes'
    }
    
    configurations.all {
        resolutionStrategy.cacheChangingModulesFor  4, ‘hours'
    }
    

    所以一般在开发模式下,我们可以频繁的发布SNAPSHOT版本,以便让其它项目能实时的使用到最新的功能做联调;
    当版本趋于稳定时,再发布一个正式版本,供正式使用。

    当然在做正式发布时,也要确保当前项目的依赖项中不包含对任何SNAPSHOT版本的依赖,保证正式版本的稳定性。

    展开全文
  • MavenSNAPSHOT版本和正式版本理解转 只是记录一下,方便查看 Maven中建立依赖管理方式基本已成为Java语言依赖管理事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制。在Maven依赖管理中,唯一...

    Maven中的SNAPSHOT版本和正式版本理解 转 只是记录一下,方便查看

    Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制。在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个属性构成的,分别是groupId、artifactId以及version。这三个属性可以唯一确定一个组件(Jar包或者War包)。

    其实在Nexus仓库中,一个仓库一般分为public(Release)仓和SNAPSHOT仓,前者存放正式版本,后者存放快照版本。如果在项目配置文件中(无论是build.gradle还是pom.xml)指定的版本号带有’-SNAPSHOT’后缀,比如版本号为’Junit-4.10-SNAPSHOT’,那么打出的包就是一个快照版本。

    快照版本和正式版本的主要区别在于,本地获取这些依赖的机制有所不同。假设你依赖一个库的正式版本,构建的时候构建工具会先在本次仓库中查找是否已经有了这个依赖库,如果没有的话才会去远程仓库中去拉取。所以假设你发布了Junit-4.10.jar到了远程仓库,有一个项目依赖了这个库,它第一次构建的时候会把该库从远程仓库中下载到本地仓库缓存,以后再次构建都不会去访问远程仓库了。所以如果你修改了代码,向远程仓库中发布了新的软件包,但仍然叫Junit-4.10.jar,那么依赖这个库的项目就无法得到最新更新。你只有在重新发布的时候升级版本,比如叫做Junit-4.11.jar,然后通知依赖该库的项目组也修改依赖版本为Junit-4.11,这样才能使用到你最新添加的功能。

    这种方式在团队内部开发的时候会变的特别蛋痛。假设有两个小组负责维护两个组件,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是不会去远程仓库中查找(这种就和正式版本的行为一样了)

    展开全文
  • 这三个属性可以唯一确定一个组件(Jar或者War)。 其实在Nexus仓库中,一个仓库一般分为public(Release)仓和SNAPSHOT仓,前者存放正式版本,后者存放快照版本。如果在项目配置文件中(无论是build.gradl
  • maven介绍 Maven中建立依赖管理方式基本已成为Java语言依赖管理事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制。...这三个属性可以唯一确定一个组件(Jar或者War)。 ...
  • semver-maven-plugin用于确定MAVEN项目下一个版本。 Symantic版本控制用于指定版本含义。 检查: 以获取更多信息 用法 在pom.xml中包含以下行为 <groupId>nl.hasslefree.maven.plugins <artifactId>semver-...
  • 这三个属性可以唯一确定一个组件(Jar或者War)。 其实在Nexus仓库中,一个仓库一般分为public(Release)仓和SNAPSHOT仓,前者存放正式版本,后者存放快照版本。如果在项目配置文件中(无论是build.gradl
  • MavenSNAPSHOT版本和Release版本

    千次阅读 2019-03-09 08:58:55
    Maven中建立依赖管理方式基本已成为Java语言依赖管理事实标准,Maven的替代者Gradle也基本沿用了...这三个属性可以唯一确定一个组件(Jar或者War)。 其实在Nexus仓库中,一个仓库一般分为public(Release...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 235
精华内容 94
关键字:

maven确定包的版本