为了账号安全,请及时绑定邮箱和手机立即绑定

认识Maven

标签:
Premiere

Maven是构建工具,能把项目抽象成POM(project object model),Maven使用POM对项目进行构建、打包、文档化等操作。最重要的是解决了项目需要类库的依赖管理,简化了项目开发环境搭建的过程,使得我们开发一个从简单到大型的复杂项目变得很容易。

Maven介绍

Maven采用了不同方式对项目构建进行抽象,比如源码位置总是在src/main/java,配置文件则在src/main/resources中,编译好的类总是放在项目的target目录下,总的来说,Maven实现了以下目标:

  • 使构建项目变得很容易,Maven屏蔽了构建的复杂过程。比如,你只需要输入maven package就可以构建整个Java项目。

  • 统一了构建项目的方式,不同人、不同公司的项目都有同样的描述项目和构建项目的方式,Maven通过pom.xml来描述项目,并提供一系列插件来构建项目。

  • 提出了一套开发项目的最佳实践,而不用每个项目都有不同结构和构建方式,比如源代码在src/main/java中,测试代码在src/test/java中,项目需要的配置文件则放在src/main/resources中。

  • 包含不同环境项目的构建方式

  • 解决了类库依赖的问题,只需要声明使用的类库,Maven会自动从仓库下载依赖的jar包,并能协助你管理jar包之间的冲突。

POM文件

Maven的核心是pom.xml,用XML方式描述了项目模型,如下:

  <?xml version="1.0" encoding="UTF-8"?><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>4.0.0</modelVersion>

  <groupId>me.rowkey</groupId>
  <artifactId>test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>antares</name>
  <url>http://maven.apache.org</url>

  <repositories>
      <repository>
          <id>nexus-suishen</id>
          <name>Nexus suishen</name>
          <url>http://maven.etouch.cn/nexus/content/groups/public/</url>
          <snapshots>
              <enabled>true</enabled>
              <updatePolicy>always</updatePolicy>
              <checksumPolicy>warn</checksumPolicy>
          </snapshots>
      </repository>
  </repositories>

  <properties>
      <slf4j.version>1.7.21</slf4j.version>
  </properties>

  <dependencies>
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>${slf5j.version}</version>
      </dependency>

      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.8.2</version>
          <scope>test</scope>
      </dependency>
  </dependencies>

  <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>2.3.2</version>
              <configuration>
                  <source>1.8</source>
                  <target>1.8</target>
              </configuration>
          </plugin>
      </plugins>
  </build></project>

pom.xml通常有以下元素:

  • groupId:表示项目所属的组,通常是一个公司或组织的名称,如org.springframework;

  • artifactId: 项目唯一的标志,比如,有spring-boot-starter-web、spring-boot-devtools。groupId和artifactId能唯一标识一个项目或者一个库,我们通常称之为项目坐标。

  • packaing: 项目的类型,常用的有jar和war两种,jar表示项目会打包成一个jar包,这是Spring Boot的默认使用方式。

  • version:项目的版本号

通常来说,项目版本号分三段,主版本号.次版本号.修订版本号。主版本号变动代表架构变动或者不兼容实现,次版本号是兼容性修改、功能增强,修订版本则是bug修复。

  • modelVersion: 代表pom文件的Maven的版本

  • properties 是全局属性的配置

  • dependencies:此元素下包含了多个dependency,用来声明项目的依赖,这是pom最核心的部分。

  • dependency:包含在dependencies中,用来声明项目的依赖。

  • scope: scope代表此类库与项目的关系,默认是compile,也就是编译和打包都需要此类库。test表示仅仅在单元测试的时候需要;provided表示在编译阶段需要此类库,但打包阶段不需要,这是因为项目的目标环境已经提供了。runtime表示在编译和打包的时候都不需要,但在运行的时候需要。

  • build:此项在pom中可选,build包含了多个插件plugin,用来辅助项目构建。

  • plugins:对插件的管理

pom的继承

可以通过parent实现POM的继承以完成统一配置管理,子POM中的配置优先级高于父POM。

例如,以Spring Boot为基础的项目中,pom.xml文件中往往有如下属性:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version></parent>

这样spring-boot-starter-*依赖就不需要指明version版本了,起到了统一控制版本的作用:

<dependencies>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
   </dependency></dependencies>

能够继承的元素如下:

  • groupId,version

  • Project Config

  • Dependencies

  • Plugin configuration

此外,<dependencyManagement>和<pluginManagement>可以统一做依赖和插件的配置管理,不同于<dependencies>和<plugins>的是,如果子POM中没有声明<dependency>和<plugin>则并不生效。

标准Web项目结构

在Maven中,一个Web项目的标准结构,如下所示:

webp

2291536764978_.pic.jpg

其中:

  • src/main/java Java代码目录

  • src/main/resources 配置文件目录

  • src/main/webapp webapp根目录

  • src/test/java 测试代码目录

  • src/test/resources 测试配置目录

  • target/classes 代码编译结果目标目录

  • target/test-classes 测试代码编译结果目标目录

自定义项目结构

 <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <warSourceDirectory>WebContent</warSourceDirectory>
            </configuration>
        </plugin>
    </plugins>
    <sourceDirectory>src</sourceDirectory>
    <testSourceDirectory>test/java</testSourceDirectory>
    <testResources>
        <testResource>
            <directory>test/resources</directory>
        </testResource>
    </testResources>
    <directory>build</directory></build>



作者:打铁大师
链接:https://www.jianshu.com/p/1427fe00deb8


点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消