标签:
一、POM ( Project Object Model,项目对象模型 )——Maven项目的核心,定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等。
1.groupId、artifactId和version这三个元素定义了一个项目的基本坐标,在Maven的世界里,任何的jar、pom或者war都是基于这些基本的坐标进行区分的。
2.groupId定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联。例如:com.googlecode.myapp。
3.artifactId定义了当前Maven项目在组中唯一的ID。例如:myapp
4.version指定了Hello World项目当前的版本——1.0SNAPSHOP。SNAPSHOT说明该项目还处于开发中,是不稳定的版本。随着项目的发展,version会不断更新,如升级为1.0、1.1、2.0等。
5.name元素声明了一个对于用户更为友好的项目名称,不是必须的,推荐为每个POM声明name。
二、项目主代码和测试代码
1.项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(如jar),而测试代码只在运行测试时用到,不会被打包。
2.默认情况下,Maven项目主代码位于src/main/java目录,这是Maven的约定。
3.默认情况下,Maven项目中默认的测试代码目录是src/test/java。
4.使用JUnit进行测试时,首先需要为项目添加一个JUnit依赖,修改项目的POM代码增加以下代码:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.6</version> <scope>test</scope> </dependency>
上述POM代码有一个值为test的元素scope,scope为依赖范围,若依赖范围为test表示该依赖只对测试有效,如果在主代码中用Junit就会造成编译错误。如果不声明依赖范围,那么默认值就是compile,表示该依赖对主代码和测试代码都有效。
5.Maven执行测试命令:mvn clean test。
三、使用Maven进行编译
1.在项目根目录下运行命令mvn clean compile。
2.clean告诉Maven清理输出目录target/,compile告诉Maven编译项目主代码,将项目的主代码编译至target/classes目录。
四、打包和运行
1.如果POM中没有指定打包类型,使用默认打包类型jar。执行命令:mvn clean package进行打包。
2.如果要让其他的Maven项目直接使用打包的jar,还需要一个安装的步骤,执行mvn clean install。
到此为止,Maven最主要的命令:mvn clean compile、mvn clean test、mvn clean package、mvn clean install。这四个命令必须按先后顺序执行。
3.使用intellij IDEA来用Maven编译我们的代码,打开Maven Projects菜单,选中clean、compile并右键点击Run ‘xxx[clean,compile]‘按钮即可。
五、Maven的坐标
1.Maven坐标的元素包括groupId、artifactId、version、packaging、classifier。
2.groupId:定义当前Maven项目隶属的实际项目。
3.artifactId:该元素定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀,这样做的好处是方便寻找实际构件。在默认情况下,Maven生成的构件,其文件名会以artifactId作为开头。
4.version:该元素定义Maven项目当前所处的版本。
5.packaging:该元素定义Maven项目的打包方式。首先,打包方式通常与所生成构件的文件扩展名对应。其次,打包方式会影响到构=构建的生命周期。最后,当不定义packaging的时候,Maven会使用默认值jar。
6.classifier:该元素用来帮助定义构建输出的一些附属构件。
上述5个元素中,groupId、artifactId、version是必须定义的,packaging是可选的(默认为jar),而classifier是不能直接定义的。
六、依赖范围scope的取值
依赖范围就是用来控制依赖与三种classpath的关系(编译classpath、测试classpath、运行classpath)的关系。
1.compile:编译依赖范围。默认使用该值。使用此依赖范围,对于编译、测试、运行三种classpath都有效。如spring-core。
2.test:测试依赖范围。只对于测试classpath有效。如JUnit。
3.provided:已提供依赖范围。对于编译和测试classpath有效,但在运行时无效。如servlet-api。
4.runtime:运行时依赖范围。对于测试和运行classpath有效,但在编译主代码时无效。如JDBC驱动实现。
5.system:系统依赖范围。与provided完全一致。尽量少用。
6.import:导入依赖范围。不会对三种classpath产生实际的影响。
标签:
原文地址:http://www.cnblogs.com/FlySheep/p/4641247.html