我爱编程

Maven in action

2018-04-04  本文已影响0人  LaMole

第三章

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

<project>
··· 
    <build>
        <plugins>
            <groupId>org.apache.maven.plugins</...>
            <artifactId>maven-compiler-plugin</...>
            <configuration>
                <source>1.5</...>
                <target>1.5</...>
            </...>
        </....>
    </...>
...
</project>

第五章

pom的基本元素

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

依赖的配置

<project>
    <dependencies>
        <dependency>
            <groupId>xxx</groupId>
            <artifactId>xxx</artifactId>
            <version>0.0.65</version>
            <type>pom</type>
            <scope>import</scope>
            <optional>xxx</optional>
            <exclusions>
                <exclusion>
                   ···
                </exclusion>
                ···
            </exclusions>
        </dependency>
    </dependencies>
···
</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的不稳定性,需要排除第三方依赖,并在项目指定依赖。

归类依赖

<project>
    <properties>
        <springframework.version>2.5.6</springframework.version>
    </properties>
    ···
    <dependencies>
        <dependency>
            <version>${springframework.version}</version>
        </dependency>
        ···
    </dependencies>
</project>

优化依赖

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

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

第六章

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

上一篇 下一篇

猜你喜欢

热点阅读