MAVEN架构项目管理工具(下)

1、maven工程约定目录结构

        每一个maven在磁盘中都是一个文件夹(即项目,以hello项目为例)

Hello/
    ---/src
	------/main          #放置主程序Java代码和配置文件
	-----------/java      #程序的包和包中的文件
	-----------/resource      #java程序中要使用的配置文件
	
	------/test            #放测试程序代码和文件的,可以没有
	-----------/java      #测试程序的包和包中的文件
	-----------/resource      #测试java程序中要使用的配置文件
	
    ---/pom.xml      #maven的核心文件(maven项目必须有)

2、pom.xml

        不管是自己的还是第三方的,都需要坐标来标识,不同的是,第三方的需要引入第三方依赖,即dependcy

        就像 Make 的 MakeFile、Ant 的 build.xml 一样,Maven 项目的核心是 pom.xml。POM( Project Object Model,项目对象模型 ) 定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等

        概念:

                在 Maven 中坐标是构件的唯一标识,Maven 坐标的元素包括 groupIdartifactIdversion、packaging、classifier。上述5个元素中,groupId、artifactId、version 是必须定义的,packaging 是可选的 ( 默认为 jar ,web项目中需要改为war)。

        意义:

                Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范

                拥有了统一规范,就可以把查找工作交给机器

        含义:

                groupId:组织标识,一般为:公司网址的反写+项目名(com.baidu)

                artifactId:项目名称,一般为:项目名-模块名

                version:版本号 形式为0.0.1-SNAPSHOT:

                        第一个 0 表示大版本号,第二个 0 表示分支版本号,第三个 0 表示小版本号

                        SNAPSHOT -- 快照版本,ALPHA -- 内侧版本,BETA -- 公测版本,RELEASE --                         稳定版本,GA -- 正式发布

                packaging:打包的方式,如:pom, jar, maven-plugin, ejb, war,....

                clissifier:用来帮助定义构件输出的一些附属构件

3、依赖

        含义:

                在编写Java代码时,我们总是需要一些库,比如我要使用mysql驱动,在没有maven时,我们需要去网上下载对应的jar包,然后移动到对应项目的lib中,而我们使用maven后,Maven将下载它们并将它们放在您的本地Maven存储库中。

                我们可以在POM文件中的dependencies元素内指定依赖关系。

        依赖范围:

                Maven项目在开发工程中有三套classpath

                                主代码:main下面的都是主代码,在编译的时候的依赖

                                测试代码:test下是测试代码,编译的时候的依赖

                                运行时:main代码在运行的时候对包的依赖

                依赖范围的使用,通过在引用第三方依赖时的<scope></scope>标签进行设置共 6 种 scope,包括:compileprovidedruntimetest、system、import,例如junit单元测试,只在测试中使用,则选择test即可,默认为compile

                Compile:编译依赖范围。默认使用此依赖范围,其下的maven依赖,对于编译,测试,运行classpath都有效

                Test:测试依赖范围。只对测试classpath有效,编译主代码或运行项目时无法使用此依赖。典型例子如junit

                Provided:已提供依赖范围。其对于编译与测试classpath有效,运行时无效。如在web开发时,只有在编译和测试时才用到servlet-api,将其设置为此范围,在运行时servlet-api由web容器提供,无须依赖。并且在打war包时,此范围的依赖不会打在WEB-INF/lib下

                Runtime:运行时依赖范围。与provided相对,运行时classpath有效。典型例子如jdbc       

        依赖传递和可选依赖:

                第一直接依赖: HelloFriend项目依赖Hello项目

                第二直接依赖: MakeFriend项目依赖HelloFriend项目

                依赖范围对传递依赖的影响

                               传递依赖是会受到依赖范围的影响的,具体来看结果如下:

                                依赖阻断:

                                        使用<optional>true</optional>来完成依赖阻断

                                 可选依赖 :

                                        如果我们需要在依赖中明确的排除掉某一依赖,则可以使用exclusion属性,排除掉引用的依 赖   

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值