Java学习之Maven

IDEA 代码头注释
/**
 * @project: ${PROJECT_NAME}
 * @ClassName: ${NAME}
 * @author: C_N_Candy
 * @creat: ${DATE} ${TIME}
 *  Des:${descript}
 */

 

 
Maven:
  Maven解决了一下几个问题:
  • 让构建过程变的简单
  • 提供一套统一的构建系统
  • 提供项目相关的信息
  • 可以透明得迁移新的特性
 
settings.xml是maven的全局配置文件。而pom.xml文件是所在项目的局部配置。
 
 
POM:
  pom文件表示了当前这个项目的项目对象模型(Project Object Model(POM)。在Maven中,POM是它进行操作的基本单位。
  Maven的本质是以围绕POM这个概念为中心来管理整个项目的。POM中包含了项目中所有和项目相关的重要的信息,并且提供了类似一站式购物那样的依赖管理方式,可以很方便的找到当前项目关联的所有依赖来项目。
 
pom.xml文件中的元素:
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.myapp</groupId>
  <artifactId>myapp</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>myapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

 

  • project 这个元素是Maven的pom.xml文件的顶层元素。每个POM文件都是以一个project元素包裹的。
  • modelVersion 这个元素指定了当前这个pom.xml文件使用的项目对象模型(POM)的版本
  • groupId 这个元素表示创建这个项目的组织的唯一标识。这个元素的值是区分一个项目的关键信息之一,它的值通常是由该项目的组织的域名的反写产生的(和Java的包名的机制一样)。
  • artifactId 这个元素是唯一标识了该项目最终生成的artifact(可以理解为是我们编写代码产生的一个程序,所以可以理解为是手工作品)。一个项目的artifact一般是一个jar文件。一个项目最终生成的artifact的名字的格式是-.,比如上面的项目生成的artifact为myapp-1.0.jar。
  • packaging 这个元素指定了该artifact打包的类型(比如:jar、war、ear等)。这不只是意味着该artifact是以什么方式打包,也指定了在构建过程中会用到的特定的生命周期(所谓的生命周期,简单的说就是构建的过程)。packaging元素的默认值是JAR。
  • version 这个元素指定了项目生成的artifact的版本号。在版本号中会包含当前项目的进度,比如这里的SNAPSHOT。
  • name 这个元素表示项目的名字,常用于生成的文档中。
  • url 这个元素表示该项目所在的站点,常用于生成的文档中。
  • description 这个元素提供了对项目的描述,通常用于生成的文档中。
 
 
Maven项目目录结构:
${basedir}
|-- pom.xml
|-- src
|    |-- main
|    |    `-- java
|    |    `-- resources
|    |    `-- filters
|    `-- test
|    |    `-- java
|    |    `-- resources
|    |    `-- filters
|    `-- it
|    `-- assembly
|    `-- site
`-- LICENSE.txt
`-- NOTICE.txt
`-- README.txt
  • src/main/java 项目的源代码所在的目录
  • src/main/resources 项目的资源文件所在的目录
  • src/main/filters 项目的资源过滤文件所在的目录
  • src/main/webapp 如果是web项目,则该目录是web应用源代码所在的目录,比如html文件和web.xml等都在该目录下。
  • src/test/java 测试代码所在的目录
  • src/test/resources 测试相关的资源文件所在的目录
  • src/test/filters 测试相关的资源过滤文件所在的目录
 
上面的目录结构,我们接触的比较多,而下面的这些目录结构,用的相对不是很多:
  • src/it 集成测试代码所在的目录,主要是供别的插件使用的。
  • src/assembly 组件(Assembly)描述符所在的目录
  • src/site 站点文件
  • LICENSE.txt 项目的许可文件
  • NOTICE.txt 该项目依赖的库的注意事项
  • README.txt 项目的readme文件
 
创建一个名为myapp的Maven项目:
myapp
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- myapp
    |               `-- App.java
    `-- test
        `-- java
            `-- com
                `-- myapp
                    `-- AppTest.java

 

 
更新补充:

 

Maven的构建的生命周期:
  在Maven中,内建了三种构建生命周期:default、clean、site。default生命周期处理项目的部署,clean生命周期处理项目构建后的清理工作,site生命周期对项目的站点文档进行生成。
 
阶段
  Maven的生命周期,又是由不同的阶段(phase)构成的。每一个生命周期,都包含了一系列的阶段,每一个阶段都表示了生命周期中的一个状态。比如,对于default生命周期来说,包含了如下的这些阶段
  • validate
  • compile
  • test
  • package
  • integration-test
  • verify
  • install
  • deploy
 
 
阶段修正
  Maven的生命周期由一系列阶段(phase)构成,以内置的生命周期default为例,它包含以下phase:
  • validate
  • initialize
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources
  • compile
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources
  • test-compile
  • process-test-classes
  • test
  • prepare-package
  • package
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install
  • deploy
 
如果我们运行mvn package,Maven就会执行default生命周期,它会从开始一直运行到package这个phase为止:
  • validate
  • ...
  • package
 
如果我们运行mvn compile,Maven也会执行default生命周期,但这次它只会运行到compile,即以下几个phase:
  • validate
  • ...
  • compile
 
Maven另一个常用的生命周期是clean,它会执行3个phase:
  • pre-clean
  • clean (注意这个clean不是lifecycle而是phase)
  • post-clean
 
所以,我们使用mvn这个命令时,后面的参数是phase,Maven自动根据生命周期运行到指定的phase。
 
 
在实际开发过程中,经常使用的命令有:
  mvn clean:清理所有生成的class和jar;
  mvn clean compile:先清理,再执行到compile;
  mvn clean test:先清理,再执行到test,因为执行test前必须执行compile,所以这里不必指定compile;
  mvn clean package:先清理,再执行到package。
 
大多数phase在执行过程中,因为我们通常没有在pom.xml中配置相关的设置,所以这些phase什么事情都不做。
 
经常用到的phase其实只有几个:
  • clean:清理
  • compile:编译
  • test:运行测试
  • package:打包
 
实际项目

 

 
lifecycle、phase和goal
  • lifecycle相当于Java的package,它包含一个或多个phase;
  • phase相当于Java的class,它包含一个或多个goal;
  • goal相当于class的method,它其实才是真正干活的。
 
 
 
小结
1.Maven通过lifecycle、phase和goal来提供标准的构建流程。
2.最常用的构建命令是指定phase,然后让Maven执行到指定的phase:
  • mvn clean
  • mvn clean compile
  • mvn clean test
  • mvn clean package
3.通常情况,我们总是执行phase默认绑定的goal,因此不必指定goal。
 
 
 
 
 
posted @ 2023-06-28 13:51  C_N_Candy  阅读(38)  评论(0)    收藏  举报