赞
踩
pom.xml解释
- <?xml version="1.0" encoding="UTF-8"?>
- <!--project 标签:根标签,表示对当前工程进行配置、管理-->
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <!--modelVersion 标签:从Maven2开始就固定是4.0.0-->
- <!--代表当前pom.xml所采用的标签结构-->
- <modelVersion>4.0.0</modelVersion>
-
- <!--坐标信息-->
- <!--在本地仓库中安装后对应的路径:com\seer\maven\seer-heathy-demo\1.0-SNAPSHOT\seer-heathy-demo-1.0-SNAPSHOT.jar-->
- <!--groupId 标签:坐标向量之一;代表公司或组织开发的某一个项目-->
- <groupId>com.seer.maven</groupId>
- <!--artifactId 标签:坐标向量之一;代表项目下的某一个模块-->
- <artifactId>seer-heathy-demo</artifactId>
- <!--version 标签:坐标向量之一;代表当前模块的版本-->
- <version>1.0-SNAPSHOT</version>
-
- <!--packaging 标签:打包方式-->
- <!--取值jar:生成jar包,说明这是一个Java工程-->
- <!--取值war:生成war包,说明这是一个Web工程-->
- <!--取值pom:说明这个工程是用来管理其他工程的工程-->
- <packaging>jar</packaging>
- <name>seer-heathy-demo</name>
- <url>http://maven.apache.org</url>
-
- <!--在Maven中定义属性值-->
- <properties>
- <!--在构建过程中读取源码时使用的字符集-->
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <!--dependencies标签:配置具体依赖信息,可以包含多个dependency子标签-->
- <dependencies>
- <!--dependency 标签:配置一个具体的依赖信息-->
- <dependency>
- <!--坐标信息:导入那个jar包,就配置它的坐标信息即可-->
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <!--scope标签:配置当前依赖的范围-->
- <scope>test</scope>
- </dependency>
- </dependencies>
-
-
- </project>
创建java版的maven工程
1、Maven中的坐标
groupId:公司或组织的id
artifactId:一个项目或者是项目中的一个模块的id
version:版本号
groudid:公司或组织域名的倒序,通常也会加上项目名称
列如:com.seer.maven
artifactid:模块的名称,将来作为Maven工程的工程名
version:模块的版本号,根据自己的需要的设定
列如:SNAPSHOT表示快照版本,正在迭代过程中,不稳定版本
列如:RELEASE表示正式版本
坐标和仓库中的jar包的存储路径之间的对应关系
坐标:
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.5<version>
上面坐标对应jar在Maven本地仓库中的位置:
Maven本地仓库根目录\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar
使用maven命令生成Maven工程
运行 mvn archetype:generate 命令
POM:projectObjectModel,项目对象模型。和POM类似的是:DOM(Doucument Object Model),文档对象模型。他们都是模型化思想的具体实现。
开发领域的技术发展趋势就是:约定大于配置,配置大于编码
Maven执行构建命令
1、mvn -v命令和构建操作无关,只要正确配置了PATH,在任何目录下都可以执行。
2、清理操作
mvn clean
效果:删除target目录
3、编译操作
主程序编译:mvn compile
测试程序编译:mvn test-compile
主体程序编译结果存放的目录:target/classes
测试程序编译结果存放的目录:target/test-classes
4、测试操作
mvn test
测试报告存放的目录:target/surefire-reports
5、打包操作
mvn package
打包结果--jar包,存放的目录:target
6、安装操作
mvn install
安装的效果是将本地构建过程中生成的jar包存入Maven本地仓库。这个jar包在Maven仓库中的路径是根据它的坐标生成的。
坐标:
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.5<version>
上面坐标对应jar在Maven本地仓库中的位置:
Maven本地仓库根目录D:\maven-repo\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar
另外,安装操作还会降pom.xml文件转换为XXX.pom文件一起存入本地仓库。所以我们在maven的本地仓库想看一个jar包原始的pom.xml文件时,查看对应的XXX.pom文件即可,他们是名字发生改变,本质上是同一个文件。
创建web版的maven工程
参数archetpeGroupId、archetypeArtifactId、archetypeVersion用来指定现在使用的maven-archetype-webapp的坐标
在一个工作空间根目录来操作,不能在一个非pom的工程下在创建其他工程。
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4
测试依赖范围:
标签的位置:dependencies/dependency/scope
标签的可选值:compile/test/provided/system/runtime/import
compile:解释
provided:已提供
- <!--dependency 标签:配置一个具体的依赖信息-->
- <dependency>
- <!--坐标信息:导入那个jar包,就配置它的坐标信息即可-->
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <!--scope标签:配置当前依赖的范围-->
- <scope>test</scope>
- </dependency>
- <dependency>
- <!--坐标信息:导入那个jar包,就配置它的坐标信息即可-->
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <!--scope标签:配置当前依赖的范围-->
- <!--表示会被大金war包-->
- <scope>compile</scope>
- </dependency>
- <dependency>
- <!--坐标信息:导入那个jar包,就配置它的坐标信息即可-->
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <!--scope标签:配置当前依赖的范围-->
- <!--表示已提供的,war包里面不会被打包进去-->
- <scope>provided</scope>
- </dependency>
结论:
compile:通常使用的第三方的框架jar包这样在项目实际运行时真正要用到的jar包都是以compile范围进行依赖,比如SSM框架所需要的jar包
test:测试过程中使用的jar包,以test范围依赖过来,比如junit。
provided:在开发过程中需要用到的“服务器上的jar包”通常provided范围依赖进来。比如servlet-api、jsp-api。而这些范围的jar包之所以不参与部署、不放进war包,就是避免和服务器上已有的同类jar包产生冲突,同时减轻服务器的负担。说白了就是“服务器上已经有了,你就别带了”
排除依赖:设置方式
- <dependency>
- <groupId>com.atguigu.maven</groupId>
- <artifactId>pro01-maven-java</artifactId>
- <version>1.0-SNAPSHOT</version>
- <scope>compile</scope>
- <!--使用excludes标签配置依赖的排除-->
- <exclusions>
- <!--在exclude标签中配置一个具体的排除-->
- <exclusion>
- <!--指定要排除的依赖坐标(不需要写version)-->
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
在dependency元素中除了可以指定依赖项目的groupId、artifactId和version之外,还可以指定以下元素:
type:对应于依赖项目的packaging类型,默认是jar
scope:表示依赖项目的一个作用范围。scope的主要取值范围如下(还有一个是在Maven2.0.9以后版本才支持的import,关于import作用域将在后文《Dependency介绍》中做介绍):
compile:这是它的默认值,这种类型很容易让人产生误解,以为只有在编译的时候才是需要的,其实这种类型表示所有的情况都是有用的,包括编译和运行时。而且这种类型的依赖性是可以传递的。
provided:这个跟compile很类似,但是它表示你期望这个依赖项目在运行时由JDK或者容器来提供。这种类型表示该依赖只有在测试和编译的情况下才有效,在运行时将由JDK或者容器提供。这种类型的依赖性是不可传递的。
runtime:这种类型表示该依赖在编译的时候不是必须的,只有在运行的时候才是必须的。
test:这表示这种依赖只有测试的时候才需要,正常情况下是不需要的。
system:这种类型跟provided类似,唯一不同的就是这种类型的依赖我们要自己提供jar包,这需要与另一个元素systemPath来结合使用。systemPath将指向我们系统上的jar包的路径,而且必须是给定的绝对路径。
systemPath:上面已经说过了这个元素是在scope的值为system的时候用于指定依赖的jar包在系统上的位置的,而且是绝对路径。该元素必须在依赖的 jar包的scope为system时才能使用,否则Maven将报错。
optional:当该项目本身作为其他项目的一个依赖时标记该依赖为可选项。假设现在projectA有一个依赖性projectB,我们把projectB这个依赖项设为optional,这表示projectB在projectA的运行时不一定会用到。这个时候如果我们有另一个项目projectC,它依赖于projectA,那么这个时候因为projectB对于projectA是可选的,所以Maven在建立projectC的时候就不会安装projectB,这个时候如果projectC确实需要使用到projectB,那么它就可以定义自己对projectB的依赖。当一个依赖是可选的时候,我们把optional元素的值设为true,否则就不设置optional元素。
exclusions:考虑这样一种情况,我们的projectA依赖于projectB,然后projectB又依赖于projectC,但是在projectA里面我们不需要projectB依赖的projectC,那么这个时候我们就可以在依赖projectB的时候使用exclusions元素下面的exclusion排除projectC。
属性:
在pom.xml文件中我们可以使用${propertyName}的形式引用属性。这个propertyName有以下几种形式:
env.propertyName:这种形式表示引用的是环境变量,比如我们需要引用当前系统的环境变量PATH的时候,就可以使用${env.PATH}。
project.propertyName:这种形式表示引用的是当前这个pom.xml中project根元素下面的子元素的值。比如我们需要引用当前project下面的version的时候,就可以使用${project.version}。
settings.propertyName:这种形式引用的是Maven本地配置文件settings.xml或本地Maven安装目录下的settings.xml文件根元素settings下的元素。比如我们需要引用settings下的本地仓库localRepository元素的值时,我们可以用${settings.localRepository}
java的系统属性,所有在java中使用java.lang.System.getProperties()能够获取到的属性都可以在pom.xml中引用,比如${java.home}。
pom.xml中properties元素下面的子元素作为属性。假如在pom.xml中有如下一段代码<properties><hello.world>helloWorld</hello.world></properties>,那么我们就可以使用${hello.world}引用到对应的helloWorld。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。