1
回答
grade vs maven
百度AI开发者大赛带你边学边开发,赢100万奖金,加群:418589053   

最近有个新项目在技术选型,其中在使用构建工具中有不一样的意见,结合自身及网上经历写了一下对比情况供参考,有错误的地方希望大家指出。

1. 引用依赖方面变得非常简洁,并且支持动态的版本依赖。在版本号后面使用+号的方式可以实现动态的版本管理。

例子:

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final' testCompile group: 'junit', name: 'junit', version: '4.+' }
 
dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.3.11'//快捷方式写法  testCompile group: 'junit', name: 'junit', version: '4.11' }

2. Gradle支持的仓库格式:Ivy /Maven/ Flat directory

例子:

uploadArchives {
    repositories {
        ivy {
            credentials {
                username "username" password "pw" }
            url "http://repo.mycompany.com" }
    }
}
repositories {
     maven {
         url "http://maven.petrikainulainen.net/repo"
     }
}
本地文件系统
repositories {
     maven {       
         url " . . / maven - repo "
     }
}
repositories {
     flatDir {
         dirs 'libA' , 'libB'
     }
}

3.在解决依赖冲突方面Gradle的实现机制更加明确。
 
   
 
   
 
   
例子来自官网:

24.2.3. Resolve version conflicts

 
   
If you haven't had to deal with the curse of conflicting versions of jars on a classpath, here is a small anecdote of the fun that awaits you. In a large project with 30 submodules, adding a dependency to a subproject changed the order of a classpath, swapping Spring 2.5 for an older 2.4 version. While the build continued to work, developers were starting to notice all sorts of surprising (and surprisingly awful) bugs in production. Worse yet, this unintentional downgrade of Spring introduced several security vulnerabilities into the system, which now required a full security audit throughout the organization.
 
   
并有相应的2个解决策略:
    
  • Newest: The newest version of the dependency is used. This is Gradle's default strategy, and is often an appropriate choice as long as versions are backwards-compatible.
  • Fail: A version conflict results in a build failure. This strategy requires all version conflicts to be resolved explicitly in the build script. See ResolutionStrategy for details on how to explicitly choose a particular version.
 
   
一个是最新原则,一个是构建过程就会发现依赖冲突,给项目带来了更加安全的依赖机制,而maven 中对依赖冲突只能自己发现并手动添加排除依赖。(这一点在以前项目中时有遇到,很蛋疼!)
 
4. 多模块构建中parent module 可以指定配置应用于子模块还是所有模块。
 
   
这一点感觉对目前我们现有多模块的情况很有作用。
5. 本地缓存机制更加强大。
 
   
 
   
这个据说可以解决以前在maven 项目中由于断网或者其他原因下载依赖失败的时候,只能手动删除本地本地依赖包重新下载的问题。(ide 经常下载经常卡死或者很慢又等不及,下载失败的情况还是很多的)
 
github上的近况
 
   
 
   
相比于maven
 
   
 
   
个人观点:
以上只是以maven 做对比,结合以前用maven 的经历,觉得新的东西更能带来更高效的工作。对于maven都没用过的来说学习哪一种都一样,何不用更简洁的呢?至于说maven 更稳定,更活跃,我觉得每个技术都需要时间的沉淀,谁用谁知道。

举报
Jeremy_hu
发帖于2年前 1回/265阅
顶部