maven(2)

来源:互联网 发布:near lock windows 编辑:程序博客网 时间:2024/06/03 17:27

MAVEN

POM详解

POM作为Maven的项目对象模型主要包含了三个部分:基本信息、依赖管理、构建

基本信息

POM的基本信息用来描述整个项目或模块的内容。主要有以下几个部分组成:


标签

描述

<groupId>

组织ID一般使用包名

<artifactId>

项目名或模块名

<version>

项目或模块的版本号:一般使用SNAPSHOT(快照版/开发版)、RELEASE(发布版/正式版)也可自定义。

<packaging>

打包类型,常见值为:jar、war、pom

Maven通过groupId+artifactId+version来确定project的位置。简单来说Maven是通过POM中的基本信息来定位project的位置

依赖管理(dependencies)

Maven的POM与POM之间存在三种关系、依赖、继承、聚合

依赖(dependencie)

当前Maven项目(A)需要依赖另一个Maven项目(B)那么我们就可以说A依赖于B(我们之前配置的Jar文件的坐标(依赖)信息实际上就是一个Maven项目)。

POM的依赖主要靠以下标签进行依赖的定位:

<dependencie>

<groupId>依赖项的groupId</groupId>

<artifactId>依赖项的artifactId</artifactId>

<version>依赖项的版本</version>

<scope>依赖项的作用域</scope>

<exclusions>排除依赖冲突时使用</exclusions>

</dependencie>

查看依赖网址:https://mvnrepository.com/

scope作用域(重点)
compile默认值(缺省值)

编译时生效,伴随Maven的整个生命周期。

provided期望

类似compile,期望JDK、使用者或容器会提供相关依赖(当我们项目需要编译或开发时需要使用该依赖、但是在部署运行时其它容器会提供相关依赖时我们进行provided配置,否则会出现依赖冲突)。例如:Servlet.jar应用服务器会提供相关依赖。

 

runtime运行

只在运行时生效。

 

test测试


只在测试时生效,不会随项目发布

 

system系统本地

maven的Repository内不存在时使用。某些项目并未使用Maven,但我们需要使用时会导致我们无法从Repository中获取对应依赖的坐标信息,我们可以把对应jar存放到WEB-INF/lib中进行引用。可以使用私服解决

 

依赖冲突解决(了解)

A和B同时依赖于C,但A和B依赖的C的版本不同时就会出现依赖版本冲突的问题。

插件方式(了解)

<reporting>

    <plugins>

        <plugin>

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-project-info-reports-plugin</artifactId>

        </plugin>

    </plugins>

</reporting>

运行:mvn project-info-reports:dependencies 查看依赖报告进行解决。

Eclipse插件

 

解决原则

1、声明优先(自动)。

2、路径优先(自动)。

3、排除依赖(手动)

4、锁定依赖(手动)。

当发生依赖冲突时Maven进行自动处理,当Maven解决不了的时候需要我们进行手动排除的操作。

 

锁定依赖:

 

配置锁定依赖并不是真正依赖,只是我们在配置依赖时不需要指定依赖的版本信息

 

继承

Maven多模块开发时parent内的依赖,对应的子模块也会拥有。

聚合

Maven多模块开发时在父模块中聚合个个子模块。

属性

属性表述类似EL表达式,使用<properties>标签来定义属性的引用。

 

 

构建(build)

当项目进行到构建阶段时,我们需要在POM中的<build>内进行项目在构建时的一些设置。

插件(Plugin)

<plugins>

<plugin></plugin>

</plugins>

 

 

 

资源(resources)

通过<resources>指定在构建时需要的资源文件。

 

resources:一个resource元素的列表,每一个都描述与项目关联的文件是什么和在哪里;

targetPath:指定build后的resource存放的文件夹。该路径默认是basedir。通常被打包在JAR中的resources的目标路径为META-INF;

filteringtrue/false,表示为这个resource,filter是否激活。

directory:定义resource所在的文件夹,默认为${basedir}/src/main/resources;

includes:指定作为resource的文件的匹配模式,用*作为通配符;

excludes:指定哪些文件被忽略,如果一个文件同时符合includes和excludes,则excludes生效;

testResources:定义和resource类似,但只在test时使用,默认的test

resource文件夹路径是${basedir}/src/test/resources,test resource不被部署。

多模块

在项目开发中如果代码放到一个Maven项目中,在多人开发时,容易出现冲突,可以使用到Maven的聚合项目进行分模块开发,减少冲突的发生。

模块划分

Maven的模块划分一般遵照2个原则:分层模块、业务模块。某些大型项目会结合使用。

步骤

1、创建父项目,将父项目的packageing设置为pom

2、创建子项目,使用<parent>标签将父项目信息引入。

3、父项目使用<modules>聚合各个子项目,并将项目第三方依赖信息配置到父项目内来控制依赖

4、根据划分规则配置子模块间的相互依赖

Eclipse创建

创建父项目

 

 

创建子模块

 


 

 

配置模块间的依赖关系

 

从案例中我们可以发现dao依赖于domain,service依赖于dao和domain,web依赖于service和domain。但应为Maven的POM具有继承性,我们只需将dao依赖于domain后,所有依赖于dao的pom都会有domain下的内容。

DAO模块

 

Service模块

 

Web模块

 

POM(主POM)

 

命令创建

步骤

1、使用命令创建父项目,并src目录删除,并修改pom中的packageing修改为pom

 

2、进入父项目目录内根据不同模块的打包格式,运行maven命令创建子模块(Maven会自动将对应模块聚合到父项目内,要保证执行子模块命令时在父项目下)。

 

3、导入Eclipse中并,配置模块间的依赖关系。

 

创建命令

父项目(创建完成后删除src并修改packageing为pom):

mvn archetype:generate -DgroupId=com.dj.ssh -DartifactId=maven_ssh -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

子项目(进入父项目目录内执行):

mvn archetype:generate -DgroupId=com.dj.ssh -DartifactId=maven_ssh_domain -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

mvn archetype:generate -DgroupId=com.dj.ssh -DartifactId=maven_ssh_dao -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

mvn archetype:generate -DgroupId=com.dj.ssh -DartifactId=maven_ssh_service -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

mvn archetype:generate -DgroupId=com.dj.ssh -DartifactId=maven_ssh_web -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

 

私服(了解)

一般情况下,各个公司的开发团队为了提高开发效率,都会使用项目构建工具进行开发。一般情况下都需要管理各种依赖的插件,需要频繁连接服务器。而考虑到开发效率,就需要搭建私服(公司在自己的局域网内搭建的远程仓库服务器,称为私服)。

使用私服的好处:

节省外网带宽。

加速Maven构建,提高效率

内部部署构件。

灵活的安全和权限管理。

下载/安装

私服构建工具:NEXUS。

下载地址:https://www.sonatype.com/download-oss-sonatype

配置环境变量

1、新增NEXUS_HOME=nexus解压目录。

2、PATH中增加%NEXUS_HOME%\bin。

运行

cmd中输出:nexus.exe/run

等启动完毕后,在浏览器中出入:http://localhost:8081/

默认用户名/密码:admin/admin123

nexus目录中etc下nexus-default.properties可以修改访问端口。

 

配置

1、修改本地Maven的setting.xml,将镜像配置改为私服地址。

2、POM中新增私服信息。

总结

常用命令

查看Maven版本:mvn -v / mvn -version

创建项目:mvn archetype:generate

编译:mvn compile

清除:mvn clean

打包:mvn package

安装:mvn install

发布:mvn deploy

运行:mvn tomcat:run、mvn tomcat7:run、mvn jetty:run(根据POM中配置的不同插件选择)

(注意:在Eclipse中使用去掉mvn)

在进行 compile、package、install、deploy或运行命令时一般和clean组合使用并且可以加入参数:

跳过测试 -Dmaven.test.skip=true

强制更新快照 -U

compile、package、install、deploy区别

1、compile只会编译类文件,不会打包。

2、package只会将包生成到target内。

3、install会将target内的包安装到本地仓库。

4、deploy会将target内的包安装到本地仓库并且上传到私服(POM文件需要配置)。

其它命令参考资料:http://www.cnblogs.com/wkrbky/p/6352188.html