Maven学习

一、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产生实际的影响。

原文地址:https://www.cnblogs.com/FlySheep/p/4641247.html