Maven 模块化项目管理「建议收藏」

Maven 模块化项目管理

大家好,又见面了,我是你们的朋友全栈君。

一、什么是Maven?

Maven是一款软件项目管理和理解工具。基于项目对象模型(POM)的概念,通过添加一小段描述来管理项目的构建。

二、为什么要使用Maven?

以前在用Java开发一个项目时,往往需要引入几十或者上百个Jar包,那么这些Jar可能分散在不同的地址,我们需要一个一个去下载,然后在导入到我们项目中!有时一个Jar包找到合适的版本可能需要几个小时。更让人痛苦的是一个大项目开发需要多人协同开发。那么项目依赖的Jar包就需要有一份公共的来解决不同人引入相同的Jar不同版本的依赖从而导致冲突。

现在使用Maven来构建,Maven通过一个POM文件来管理项目依赖,只要在POM中加入想要的Jar包依赖,Maven会在本地仓库中查找依赖包。如果本地没有找到就会从配置的私服中下载依赖,没有配置私服Maven就会从Maven的中央仓库(99%的开源项目都可以在Maven中央仓库中找到)中去找到指定版本的Jar包。

三、约定规范
Maven 模块化项目管理「建议收藏」

web : 项目名称

src : 源代码和测试代码的根目录

main : 应用代码目录

java : 源代码目录

resources : 配置文件目录

test : 测试代码目录

testResources : 测试使用的配置文件

webapp : 当你的项目是一个web项目时才会需要这个文件夹,里面都是存放项目静态文件。如果你的项目是jar项目那就不需要这个目录了。

target : 项目打包时maven自动帮我们创建的目录,里面就是打包好的项目文件

pom.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>com.test</groupId>
  <artifactId>maven-test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>maven-test Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    /**
    * POM文件中使用的变量声明
    * 可以在这里声明各种文件的版本号
    * 例如 : <spring.version>4.3.9.RELEASE</spring.version>
    * 在下面的依赖引入时可以声明一个公共版本
    */
    <spring.version>4.3.9.RELEASE</spring.version>
  </properties>

  <dependencies>
    /**
    * 一个 dependency 为一个依赖
    * groupId : 项目组织唯一的标识符,对应JAVA的包的结构,在main目录里面java的目录结构 (groupId可以多个项目使用一个)
    * artifactId : 项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。(每个项目中同样的版本只能有一个)
    */

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
  </dependency>
  
  </dependencies>

  <build>
    <finalName>maven-test</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        /**
        * 这边是maven插件配置
        * 需要打包jar时,就需要配置mainClass
        * 多模块时,需要配置子模块文件引入插件
        */
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.7.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.20.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

五、模块化项目管理

Maven模块化项目管理,适用于一些比较大的项目,通过功能的模块拆分,实现代码的解耦合,便于代码的复用和维护及管理。开源框架在便于阅读源码前提下基本都是采用模块化的方式,提供模块集成,用户可以根据需求配置指定的模块。

父模块配置:
Maven 模块化项目管理「建议收藏」
子模块配置:
Maven 模块化项目管理「建议收藏」
父模块配置dependencies与dependencyManagement的区别 :

dependencies : 在子模块中不写该依赖项,那么子模块仍然会从父模块中继承该依赖项(全部继承,上面使用的截图就是dependencies)

dependencyManagement : 父模块里只是声明依赖(在dependencies外层在包一个dependencyManagement标签说明),并不实现引入,因此子模块需要显示的声明需要用的依赖。如果不在子模块中声明依赖,是不会从父模块中继承下来的;只有在子模块中写了该依赖项,并且没有指定具体版本,才会从父模块中继承该项,并且version和scope都读取自父pom。另外如果子模块中指定了版本号,那么会使用子模块中指定的Jar版本。

部分信息参考来自网络.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107468.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • android 泰国/缅甸语/捷克较低,Contacts联系出现精神错乱之类的问题清单[通俗易懂]

    android 泰国/缅甸语/捷克较低,Contacts联系出现精神错乱之类的问题清单

  • MODIS数据介绍及下载

    MODIS数据介绍及下载MODIS数据简介中分辨率成像光谱仪(MODerate-resolutionImagingSpectroradiometer)-MODIS是Terra和Aqua卫星上搭载的主要传感器之一。MODIS标准数据产品根据内容的不同分为0级、1级数据产品,在1B级数据产品之后,划分2-4级数据产品,包括:陆地标准数据产品、大气标准数据产品和海洋标准数据产品等三种主要标准数据产品类型,总计分解为44种标准数据产品类型。数据产品的详细介绍参考博文。官网下载数据数据产品投影MODIS数据采用正弦投影(Sin

  • 在微观经济学中,对某一商品的需求是指_苹果公司因违反俄反垄断法被罚

    在微观经济学中,对某一商品的需求是指_苹果公司因违反俄反垄断法被罚供给与需求理论—–说明市场经济中供给与需求如何决定价格,以及价格又如何配置经济中的稀缺资源。4.1市场与竞争4.1.1什么是市场1、市场:由某种物品或劳务的买者与卖者组成的一个群体;4.1.2什么是竞争市场1、竞争市场:有许多买者与卖者,以至于每个人对市场价格的影响都微乎其微的市场。2、完全竞争市场—-两个特征:1)可供销售的物品是完全相同的;2)买者和卖者人数众

  • CSS画三角形及其原理

    CSS画三角形及其原理本文转自https://blog.csdn.net/pengjunlee/article/details/53002553搜索网络之后发现三角形可以通过以下CSS代码实现:#triangle_bottom{height:0px;width:0px;border-left:20pxsolidtransparent;border-right:20pxsolidtransparent…

  • ps快捷键常用表格[通俗易懂]

    ps快捷键常用表格[通俗易懂]ps快捷键常用表,ps快捷键大全!天下武功,唯快不破!看完这篇PS快捷键使用指南,帮你掌握最常用的32个Photoshop快捷键!注:左上为Mac快捷键,右上为PC快捷键1、Command+T:自由变形该快捷键,主要对图层进行旋转、缩放等变形调整,同时可以拖动修改图层在画面中的位置,是极为常用的功能键。2、Command+J:复制图层对图层的复制,一般的操作是通过图层菜单…

  • 主机通过虚拟机上网「建议收藏」

    主机通过虚拟机上网「建议收藏」实现结果:WIN7X64主机通过XPMODE虚拟机共享上网大家现在总会碰到各种蛋疼的拨号软件、终端认证软件,而你偏偏又是用4G、8G内存装的是64位的系统或者是LINUX等非主流系统。这时候通过虚拟机32位的XP拨号、认证算是一种无奈的办法。虚拟机通过主机上网的办法是满天飞啦,可是主机通过虚拟机上网的办法我是在网上暂时没有找到。所以我自己为这个也是研究了好几天,终于倒腾出来了,和大家分享一下

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号