Maven in action

第三章

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.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 简介 概述 Maven 是一个项目管理和整合工具 Maven 为开发者提供了一套完整的构建生命周期框架 Maven...
    闽越布衣阅读 9,862评论 6 39
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,092评论 19 139
  • Maven的基本了解 什么是Maven? Maven就是Apache下的一个开源项目。它是用纯java开发的。是一...
    Bcome阅读 8,190评论 0 7
  • 月亮在天空闪烁 而我做梦变成星星 将爱含糊的闪烁出无数相思与承诺 淹没红尘情歌 所有的墙角流淌过泪水 也上演虚妄、...
    杜兹肺魚阅读 2,849评论 0 0
  • 我有一次偶然的机会去到了我的母校,但它周围的建筑物都拆掉了。婷的家也被拆了,但要改成别墅。 所以她这算是发家致富了...
    爱梦的我阅读 937评论 0 0

友情链接更多精彩内容