Maven in action

第三章

maven complier插件默认只支持编译java1.3,需要在pom中指定jdk版本。
是插件支持java5


··· 
    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            
                1.5
                1.5
            
        
    
...

第五章

pom的基本元素

加粗为必选
groupId: maven 项目隶属的实际项目
artifactId: maven 实际项目中的一个maven项目(模块)
version: maven 项目的版本
packaging: maven 项目的打包方式(默认jar)
classifier: 定义构建输出的一些附属构件。比如生产jar文件时,可以通过插件实现同时生产doc包和source包
ps.项目构建的文件名的默认规则为【artifactId-version[-classifier].packaging-->[]表示可选】

依赖的配置


    
        
            xxx
            xxx
            0.0.65
            pom
            import
            xxx
            
                
                   ···
                
                ···
            
        
    
···
</project>

groupId, artifactId, version: 依赖的基本坐标元素
type: 依赖类型,与packaging对应,默认值为jar
scope:依赖的范围,compile(编译),test(测试),provided(编译和测试),runtime(测试和运行),system(与provided一样,但是需要使用systemPath显示指定依赖文件的路径),import(第八章介绍)
主要正对编译,测试,运行时classpath不一样的情况。
optional:依赖是否可选
exclusions:排除传递性依赖

scope 编译classpath 测试classpath 运行时classpath
compile Y Y Y
test Y
provided Y Y
runtime Y Y
system Y Y

依赖性传递

依赖的依赖,比如,项目依赖spring-framework,又需要引入spring-framework的依赖。
通过依赖项目的pom文件实现传递性依赖的解决。
传递性依赖范围规则。
最左边的行表示第一依赖范围,第一行表示第二依赖范围

compile test provided runtime
compile compile runtime
test test test
provided provided provided provided
runtime runtime runtime

依赖调解

第一原则:路径最近者优先
第二原则:第一声明者优先(A->B->Y(1.0), A->C->Y(2.0))若在项目A中B的声明在C的前面则依赖于Y(1.0)
可选依赖不会传递
对于两个可选依赖要指定一个的时候需要在项目中显示声明

最佳实践

排除依赖

由于版权因素和SNAPSHOT的不稳定性,需要排除第三方依赖,并在项目指定依赖。

归类依赖


    
        2.5.6
    
    ···
    
        
            ${springframework.version}
        
        ···
    

优化依赖

mvn dependency:list 查看依赖
mvn dependency:analyze 分析依赖
需要注意

  1. Used undeclared dependencies
    使用但是未直接声明,直接依赖传递进来的,在直接依赖升级时会导致该依赖发生变化,引起项目编译错误,不易察觉,建议所有使用到的项目依赖都直接声明,方便版本控制
  2. Unused declared dependencies
    maven只会分析主代码和测试代码的依赖,执行测试和运行时的依赖发现不了,建议谨慎处理

第六章

构件路径的构成:
groupId/artifactId/version/artifactId-version-classifier.

你可能感兴趣的:(Maven in action)