maven入门

栏目: Java · 发布时间: 5年前

内容简介:Maven的默认POM文件,如果POM文件没有指定父POM文件,那么配置都是集成Super POMMaven项目的完全限定名:

maven入门

Maven

What is Maven?

  1. 构建规范项目的工具
  2. 项目管理工具,进行打包,测试,部署
  3. 具有一套规范

POM

What is POM

  1. Maven的基本工作单元
  2. xml文件
  3. 存储Maven项目的配置文件(Maven的命令都是先从POM读取命令,然后执行命令)

Super POM

Maven的默认POM文件,如果POM文件没有指定父POM文件,那么配置都是集成Super POM

Minimal POM

POM文件的最低需要的配置元素:

  1. project
  2. groupId:一般是组织名称
  3. artifactId:项目的名称
  4. version:项目的版本号

Maven项目的完全限定名:

groupId:artifactId:version

packaging元素默认是JAR,还有其他选项是WAR,EAR等等

Project Inheritance

之前在Super POM一节谈到指定了父POM的继承指定父POM的配置,实现如下:

.
 |--my-app
 |    |-- my-module
 |    |   `-- pom.xml
  `-- pom.xml
my-app的POM
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
</project>
my-module的POM
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-module</artifactId>
  <version>1</version>
</project>

修改my-module的POM,即可实现讲my-app作为一个父POM继承给my-module,实现如下:

my-module的POM
<project>
  <parent>
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <version>1</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-module</artifactId>
  <version>1</version>
</project>

如果my-app不是作为my-module的父目录,如下:

.
 |-- my-module
 |   `-- pom.xml
 `-- my-app
     `-- pom.xml

需要配置<relativePath>属性,配置相对my-module的相对路径如下:

<project>
  <parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1</version>
    <relativePath>../parent/pom.xml</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>my-module</artifactId>
</project>

Project Aggregation

如果我们想要对一些模块都需要执行相同的命令,但是不想进入每一个模块下进行执行命令,可以使用Aggregation.

目录结构

.
 |-- my-module
 |   `-- pom.xml
 `-- pom.xml

将my-module模块聚合到my-app,修改my-app的POM文件如下:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
  <packaging>pom</packaging>
 
  <modules>
    <module>my-module</module>
  </modules>
</project>
  1. <packaging>属性设置未pom
  2. <module>属性是相对于my-app的相对路径
  1. 有些命令不能同时执行
  2. Inheritance和Aggregation可以混合使用

Project Interpolation and Variables

Maven的设计哲学就是不要重复自己,所以当一些配置是相同的时候,我们可以使用自己定义的变量和预定义好的变量.

比如我们要使用projcet的version给其他配置项,我们可以如此使用

<version>${project.version}</version>

我们也可以使用自己定义的变量,比如我们定义了一个mavenVersion变量,我们可以如此使用

<project>
  ...
  <properties>
    <mavenVersion>2.1</mavenVersion>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-artifact</artifactId>
      <version>${mavenVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-project</artifactId>
      <version>${mavenVersion}</version>
    </dependency>
  </dependencies>
  ...
</project>

Standard Directory Layout

我们在思考Maven是什么的时候,其中有一个理解就是Maven是一套规范,那么这些规范体现在哪里呢,体现在他的项目目录的结构

目录 解释
src/main/java Application/Library sources
src/main/resources Application/Library resources
src/main/filters Resource filter files
src/main/webapp Web application sources
src/test/java Test sources
src/test/resources Test resources
src/test/filters Test resource filter files
src/it Integration Tests (primarily for plugins)
src/assembly Assembly descriptors
src/site Site
LICENSE.txt Project's license
NOTICE.txt Notices and attributions required by libraries that the project depends on
README.txt Project's readme

Compile

  1. 编译主代码(即是除去测试代码)

命令:

mvn compile
  1. 切换目录到需要执行编译的项目的pom.xml文件目录下
  2. 首先Maven先去下载编译需要的插件和依赖
  3. 将编译的文件放在 ${basedir}/target/classed
  4. 编译测试代码

命令:

mvn test-compile
  1. 该命令不会进行测试

Test

命令:

mvn test
  1. 如果没有执行mvn compile命令编译,则会先进行编译。
  2. 同时也需要下载测试需要的插件

install

我们执行编译的或者测试的时候会将需要依赖下载到本地仓库(一般在${user.home}/.m2/repository)中,供我们的项目使用。那么我们是不是也可以讲自己的项目给其他项目使用呢?

  1. 先打包
  2. 后安装

Packaging

命令:

mvn packaging

该命令会将打包好的文件(如果我们在POM文件设置packaging是jar,那就打成jar包,以此类推)放在目录${basedir}/target

Install

命令:

mvn install

surefire插件会查找项目中特定命名约定的文件

  • **/*Test.java
  • **/Test*.java
  • **/*TestCase.java

默认排除:

  • **/Abstract*Test.java
  • **/Abstract*TestCase.java

Clean

命令:

mvn clean

只将${basedir}/target里面的文件清除

External Dependencies

命令:

<dependencies>
    ...
    <dependency>
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <version>1.0-SNAPSHOT</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  1. groupId,artifactId,version就是我们一开始所说的项目的定位必备三项。
  2. scope代表在何时使用一般有个compile(编译),test(测试),runtime(运行)
  3. 那么我们引用的这些第三方的库从哪里下载呢?从我们repository属性配置
<repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Filter Bubble

The Filter Bubble

Eli Pariser / Penguin Press / 2011-5-12 / GBP 16.45

In December 2009, Google began customizing its search results for each user. Instead of giving you the most broadly popular result, Google now tries to predict what you are most likely to click on. Ac......一起来看看 《The Filter Bubble》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具