Maven、pom.xml

2023-11-17

maven库中心:Maven Central Repository Search 搜索可以用的包与版本

目录

Maven 

使用方法:

1. 下载,配置:

2. 项目中使用

3. 生命周期

4. 构建插件

MAVEN工程 的目录结构

父子项目

创建父项目

创建子项目



Maven 

是专门用于构建和管理Java相关项目的工具。所管理的Java项目都维护统一的jar包,有着相同的项目结构

约定>配置>编码


使用方法:

1. 下载,配置:

1. 下载apache-maven-3.5.0, 安装, 添加环境变量Path , MAVEN_HOME

      mvn -v  #检查版本

2. 创建一个maven仓库, 放所有的jar包

maven配置文件  \apache-maven-3.5.0\conf\settings.xml  

    1) 在52行 指定仓库的路径

<localRepository>仓库文件路径</localRepository>

    2) 指定jar包下载地址
maven 会默认从maven官方提供的服务器下载jar包。而官方服务器在国外,网速慢,卡
所以在 \apache-maven-3.5.0\conf\settings.xml  位置160-165行,在mirrors下新加一个阿里云的镜像地址:

<mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

2. 项目中使用

1. 创建MAVEN风格的JAVA项目  

   1.1 命令行创建

mvn archetype:generate -DgroupId=项目包名 -DartifactId=项目名称 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

【 通常都是在Eclipse或者IDEA中,通过集成Maven的方式来创建Java项目】

  1.2 Eclipse工具创建

首先eclipse工具集成maven:

window-preference- 搜Maven 
    ->Installations    添加自己的MAVEN安装目录
    ->User Setting    添加MAVEN的settings.xml

 eclipse创建maven项目:

菜单 -> File -> New -> Other -> Maven -> Maven -> Maven Project -> New Maven Project

选择具体要创建的项目模板, 或者创建简单的项目 Create a simple project (skip archetype selection)

Group Id: 填写包名
Artifact Id: 填写项目名

pom.xml指定当前项目需要用到的jar包

编写代码, 开发项目

如果选择了创建WEB项目 maven-archetype-webapp 会有两个问题
    1). 没有java源代码目录
    右键项目->属性->Java Build Path->Libraries->Edit->Workspace default JRE(jdk8)->Finish
    2). index.jsp报错
    pom.xml,出现pom专有的编辑页面,Add 添加servlet.jar包

2.  然后在项目中用pom.xml文件 添加需要jar包的名称和版本号

<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  
    <!-- 模型版本 -->  
    <modelVersion>4.0.0</modelVersion>  
    <!-- 项目包名: 一般是公司或者组织的唯一标志,并且配置时生成的路径也是由此生成 -->  
    <groupId>com.test</groupId>  
    <!-- 项目名称:项目的的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->  
    <artifactId>test-core</artifactId>  
    <!-- 本项目目前所处的版本号 -->  
    <version>1.0.0-SNAPSHOT</version>  
    <!-- 打包的机制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar -->  
    <packaging>jar</packaging>  
  
    <!-- 帮助定义构件输出的一些附属构件,附属构件与主构件对应,有时候需要加上classifier才能唯一的确定该构件 不能直接定义项目的classifer,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的 -->  
    <classifier>...</classifier>  
  
    <!-- 定义本项目的依赖关系 -->  
    <dependencies>  
  
        <!-- 每个dependency都对应一个jar包 -->  
        <dependency>  
            <!-- 一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构件, 然后引入你的工程。
如果别人想引用你现在开发的这个项目(前提是已开发完毕并发布到了远程仓库)就需要在他的pom文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入, maven就会把你上传的jar包下载到他的本地 -->  
            <groupId>com.winner.trade</groupId>  
            <artifactId>trade-test</artifactId>  
            <version>1.0.0-SNAPSHOT</version>  
  
            <!-- 作用域(scope)的限制: maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化 -->  
            <!--scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围) -->  
            <scope>test</scope>  
  
            <!-- 设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似  -->  
            <optional>false</optional>  
  
            <!-- 屏蔽依赖关系。 比如项目中使用的libA依赖某个库的1.0版,libB依赖某个库的2.0版,现在想统一使用2.0版,就应该屏蔽掉对1.0版的依赖 -->  
            <exclusions>  
                <exclusion>  
                    <groupId>org.slf4j</groupId>  
                    <artifactId>slf4j-api</artifactId>  
                </exclusion>  
            </exclusions>  
  
        </dependency>  
  
    </dependencies>  
  
    <!--构建项目 -->
    <build>
        <!--使用的插件列表 -->
        <plugins>
        </plugins>
    </build>

    <!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} -->  
    <properties>  
        <file.encoding>UTF-8</file.encoding>  
        <java.source.version>1.5</java.source.version>  
        <java.target.version>1.5</java.target.version>  
    </properties>  
  
    <!-- 项目分发信息,部署到远程服务器或者把构件部署到远程仓库 -->
    <distributionManagement>
        <!--部署项目产生的构件到远程仓库需要的信息 -->
        <repository>
            <id>banseon-maven2</id>
            <name>banseon maven2</name>
            <url>file://${basedir}/target/deploy</url>
        </repository>
        <!--构件的快照部署到哪里?如果没有配置该元素,默认部署到repository元素配置的仓库 -->
        <snapshotRepository>
            <uniqueVersion />
            <id>banseon-maven2</id>
            <name>Banseon-maven2 Snapshot Repository</name>
            <url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url>
        </snapshotRepository>
    </distributionManagement>
    ...  
</project>  

3. 生命周期

maven拥有三套相互独立的生命周期  

  • clean:项目清理(包括3个阶段)

pre-clean                 执行一些需要在clean之前完成的工作
clean                        移除所有上一次构建生成的文件
post-clean                执行一些需要在clean之后立刻完成的工作

  • default (build):项目部署 (包括23个阶段... 主要为:)

compile            编译源码
test                  运行测试工程
package           打包项目(JAR / WAR / EAR)
install               将包安装到本地仓库
deploy              将最终的包复制到远程仓库

  • site:项目站点文档创建(包括4个阶段)

pre-site           执行一些需要在生成站点文档之前完成的工作 
site                 生成项目的站点文档 
post-site         执行一些需要在生成站点文档之后完成的工作,并且为部署做准备 
site-deploy     将生成的站点文档部署到特定的服务器上

各个生命周期是相互独立的,但同一个生命周期的阶段是有前后依赖关系

在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行

4. 构建插件

生命周期相当于 Maven 提供的统一的接口,然后由 Maven 的插件来完成实现

Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成

  • 插件是在 pom.xml 中使用 plugins 元素定义的。

IDEA提供了maven的工具窗口 ,可以双击执行 生命周期与插件

idea maven 视图用法(https://www.jianshu.com/p/942be26a03e0)

maven面板的介绍 https://jingyan.baidu.com/article/cbcede074c406c02f40b4dc4.html

MAVEN工程 的目录结构

 /src
    /main
        /java               java源码
        /resource           java各种配置文件,资源文件
        /webapp             web各种源文件,格式文件如css,js,html,jsp等
    /test
        /java               java测试代码
/target                     文件编译过程中生成的.class文件,jar,war等
pool.xml                    项目核心配置文件


父子项目

通过 maven 可以创建父子-聚合项目。 所谓的父子项目,即有一个父项目,有多个子项目。

这些子项目在业务逻辑上,都归纳在这个父项目下,并且一般来说都会有重复的jar包共享。把重复的 jar 包都放在父项目下进行依赖,那么子项目就无需再去依赖这些重复的 jar 包了

创建父项目

正常的maven项目, 修改一些pom.xml配置 就可以作为一个父项目

<!-- 打包方式默认是 jar, 修改为pom。 这样才可以作为父项目存在。 -->
<packaging>pom</packaging>

<!-- 增加 hutool jar 包的依赖,用于后来子项目里观察对其的调用。 -->
    <dependencies>
      <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>4.3.1</version>
      </dependency>
    </dependencies> 

<!-- 子项目 -->
    <modules>
    	<module>子项目artifactId</module>
    </modules>

创建子项目

eclipse在 parentMavenProject父项目 的基础上创建其子项目,首先右键点击 parentMavenProject, 然后点击 New -> Other -> Maven -Maven Module -> Next

子项目pom.xml

  <parent>
    <groupId>父项目groupId</groupId>
    <artifactId>父项目artifactId</artifactId>
    <version>父项目version</version>
  </parent>

这样, 子项目虽然没有依赖jar包,但是通过 父项目达到了依赖的效果。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven、pom.xml 的相关文章

随机推荐

  • LCD DRM驱动框架分析一

    本文是基于rk3566 rk3568平台 从概念和框架上对LCD DRM驱动框架进行分析 一 DRM Direct Rendering Manager 简介 DRM 是 Linux 目前主流的图形显示框架 相比 FB 架构 DRM 更能适应
  • echarts 富文本的写法

    实现eCharts的 不同柱子不同样式 或系列下的 不同css样式 的匹配 或者 实现 不同柱子添加不同的说明文字 通过params参数判断 使用不同样式 return name4 固定字符1 value 固定字符2 其中 name4 是c
  • buuoj Exec writeup

    题目 十四 题型 web 题目 ACTF2020 新生赛 Exec 来源 buuoj https buuoj cn 思路 操作系统的指令 具体步骤 Step1 发现题目是要我们ping 我们尝试ping一下127 0 0 1 猜测是应用pi
  • MyCAT在Windows 10环境下安装和启动

    1 下载 从如下地址下载mycat的安装包 https github com MyCATApache Mycat Server eg Mycat server 1 6 7 6 release 20210303094759 win tar g
  • Java数组之数组

    一 数组的概述 数组 Array 是多个相同类型数据按一定顺序排列 的集合 并使用一个名字名 并通过编号的方式 对这些数据进行统一管理 数组的常见概念 数组名 下标 或索引 元素 数组的长度 数组本身是引用数据类型 而数组中的元素可以是任何
  • 百度人脸识别C++对接

    一 注册 id 及上载SDK 二 json openssl curl C 11 这个可以从服务器的winC 的SDK包里找 也可以自己找相应源码编译 三 加入下载的 aip cpp sdk 0 8 1 包 错误 C4996 fopen Th
  • 《深入理解计算机系统》(美)布赖恩特(Bryant,R.E.) 等

    书籍 深入理解计算机系统 美 布赖恩特 Bryant R E 等 适合对象 对计算机感兴趣的朋友 需要相关资料的可私信我 2023 09 20更新完成 先上个大纲框架图 第一章 计算机系统漫游 主要知识点 解读全书结构框架 解释OS的原理和
  • 第2章 在网页中使用JavaScript

    第2章 在网页中使用JavaScript 与能够独立执行的C C 等传统语言不同 执行JavaScript代码需要HTML网页环境 在当初开发JavaScript时 Netscape把JavaScript定位为嵌入式Web脚本语言 这种做法
  • 数据科学库——numpy读取本地数据

    轴 在numpy中可以理解为方向 使用0 1 2 数字表示 对于一个一维数组 只有一个0轴 对于2维数组 shape 2 2 有0轴和1轴 对于三维数组 shape 2 2 3 有0 1 2轴 numpy读取数据 CSV Comma Sep
  • 机构运动学分析

    背景介绍 空间机构具有结构紧凑 运动灵活等特点 在航空航天 精密仪器以及工业设备等领域具有广泛的应用 调研发现 机械臂一般采用伺服电机作为动力源 通过空间连杆驱动末端执行器 大大的减轻了工人的劳动强度 本节中主要是针对RSSR空间连杆机构进
  • 计算机考研国家线2021分数线,2021考研分数线和国家线公布时间

    考研国家线总体上分为学术型复试分数线和专业学位类分数线 也就是通常所说的学硕和专硕复试线 考试年份 考研国家线公布时间 2021年 2021年3月中旬左右 2020年 2020年4月13日 2019年 2019年3月15日 2018年 20
  • WPF使用ResourceDictionary

    WPF使用ResourceDictionary 初级篇1 1 首先建立资源字典文件 也就是一个xaml的文件 先添加一个背景色资源代码 2 调用资源资源中的资源 3 使用资源字典中的资源 参考 MSDN
  • GitHub网页 详解

    文章目录 1 登陆后标题栏 2 主页左侧部分 3 设置页面 4 组织页 5 仓库页 6 新建仓库 7 解决冲突 1 登陆后标题栏 下面从左到右 从上到下全部讲述一遍 GitHub图标 点击后跳转到登录后的首页 搜索框 输入关键字 查询相关的
  • 大气压力换算公式_压强单位bar,psi,pa,mpa,kg换算公式

    压强单位 1巴 bar 100000帕 Pa 10牛顿 平方厘米 0 1MPa 是压强的单位 早先气象学中常用毫巴 现在改用等值的国际单位百帕 1帕是1帕斯卡的简称 就是一平方米受到一牛顿的压力 在工程上仍在沿用公斤力这个单位 1公斤力等于
  • 翻译java代码软件_apk源代码翻译器

    APK源代码翻译器 安卓APK代码命令查看工具 是吾爱网友用易语言制作的安卓代码命令查看工具 该工具体积小 但功能强大 欢迎下载使用 软件说明 将apk文件拷贝至sdcard上 命令顺序如下 进入Android sdk文件夹 tools目录
  • 生成 enum 类——数字字典里新增一个按钮 生成他们对应得枚举——java

    前 后 码片 数字字典里新增一个按钮 生成他们对应得枚举 后端 xml 创建一个enum ftl Description dict dictName Author ksf Date now string yyyy MM dd Version
  • sql server 经典练习题分享二

    26 查询存在有85分以上成绩的课程Cno SELECT DISTINCT cno FROM dbo scores WHERE degree gt 85 27 查询出 计算机系 教师所教课程的成绩表 SELECT tname prof cn
  • 23. 客户默认选项(Default Customer Options)

    Editing Email Templates Email Sender Contact Us
  • iphone尺寸_2007至2020:最全的iPhone手机25部历代发展及价格变化历史

    所以iPhone SE 2020 是真的廉价倒地了 智能手机时代的开始 第一代iPhone 2G 2007 4G 3800 8G 4560 2007年 史蒂夫 乔布斯 Steve Jobs 穿着运动鞋 牛仔裤 T恤站在舞台上 宣布了第一部i
  • Maven、pom.xml

    maven库中心 Maven Central Repository Search 搜索可以用的包与版本 目录 Maven 使用方法 1 下载 配置 2 项目中使用 3 生命周期 4 构建插件 MAVEN工程 的目录结构 父子项目 创建父项目