Maven_构建和pom.xml

概述

Maven是为Java项目提供构建和依赖管理支持的工具

构建环节

  1. 清理clean

    删除上一次构建的结果

  2. 编译compile

    Java源程序编译成*.class字节码文件

  3. 测试test

    运行提前准备好的测试程序,执行src/text/java下的junit测试用例

  4. 报告site

    每次测试后用标准格式记录和显示测试结果

  5. 打包package

    Java工程:jar包

    web工程:war包

  6. 安装install

    把一个Maven工程经过打包操作生成jar包或war包存入Maven仓库

  7. 部署deploy

    部署jar包:把一个jar包部署到服务器上

    部署war包:借助maven插件,将war包部署到tomcat服务器上

pom.xml

项目对象模型:将工程抽象为一个模型

<groupId>

公司或组织的id,即公司或组织域名的倒序,通常也会加上项目名称

<artifactId>

一个项目或者是项目中的一个模块的 id,即模块的名称,将来作为 Maven 工程的工程名

<version>

版本号

<scope>

依赖范围

  • compile:编译范围(默认依赖范围),编译范围的依赖会被打包

  • provided:当jdk或者一个容器提供该依赖后才使用。provided依赖在编译和测试时需要,运行时不需要(已经被容器提供了)

  • runtime:运行和测试时需要,编译时不需要,runtime范围的依赖会被打包

  • test:编译和运行时不需要,测试编译和测试运行时需要,不会被打包

  • system:一般不推荐使用,从系统路径引入项目

  • import:使用该依赖范围的dependency只能放在dependencyManagement中,且需要配合<type>pom</type>使用

    <type>pom</type>指定该工程的打包方式为pom,即只作为管理管理子工程依赖的项目,不打包

    使用该import之后就能使子工程都能使用该dependency管理的依赖版本

    示例代码:

    <dependencyManagement><dependencies><!-- SpringCloud的jar包依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR1</version><type>pom</type><scope>import</scope></dependency><!-- SpringBoot的jar包依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>1.5.9.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies>
    </dependencyManagement>
    

    spring-cloud-dependenciesspring-boot-dependencies只是作为管理SpringCloud和SpringBoot依赖版本的父工程,在这里使用了import后,该工程的子工程都能免写SpringCloud和SpringBoot的依赖了

<exclude>

依赖排除,一般是为了避免jar包之间的冲突

代码示例:

<dependency><groupId>net.javatv.maven</groupId><artifactId>auth</artifactId><version>1.0.0</version><scope>compile</scope><!-- 使用excludes标签配置依赖的排除	--><exclusions><!-- 在exclude标签中配置一个具体的排除 --><exclusion><!-- 指定要排除的依赖的坐标(不需要写version) --><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions>
</dependency>

<module>

用于父工程指定子工程共有哪些,因为子工程一般是以模块的形式

示例:

<modules><module>demo-module</module>
</modules>

<parent>

用于子工程指定父工程为什么

示例:

<parent><artifactId>maven-demo-parent</artifactId><groupId>net.javatv.maven</groupId><version>1.0-SNAPSHOT</version>
</parent>

<dependencyManagement>

对依赖管理,实际上被管理的依赖没有真正被引入到工程

作用:帮助子工程对依赖的统一管理,子工程针对这些依赖可以省略版本号

子工程中引入该依赖时,被管理的依赖才被引入到工程

子工程也可以使用别的版本号来进行修改(一般是做升级)

<properties>

自定义属性,一般用自定义标签来维护版本数据

示例:

<properties><!-- 自定义标签,维护Spring版本数据 --><spring.version>5.3.19</spring.version>
</properties>

在需要的地方使用${}来引用自定义的属性名,实现一处修改 处处生效

示例:

	<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><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-aop</artifactId><version>${spring.version}</version></dependency></dependencies>

<build>

子标签大致包含:定义约定的目录结构、备用插件管理、生命周期插件

约定的目录结构:

目录名作用
sourceDirectory主题源程序存放目录
scriptSourceDirectory脚本源程序存放目录
testSourceDirectory测试源程序存放目录
outputDirectory主体源程序编译结果输出目录
testOutputDirectory测试源程序编译结果输出目录
resources主体资源文件存放目录
testResources测试资源文件存放目录
directory构建结果输出目录

生命周期插件:

<plugin>

示例:

<plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><executions><execution><id>default-compile</id><phase>compile</phase><goals><goal>compile</goal></goals></execution><execution><id>default-testCompile</id><phase>test-compile</phase><goals><goal>testCompile</goal></goals></execution></executions>
</plugin>
  • artifactId 和 version 标签定义了插件的坐标,作为 Maven 的自带插件这里省略了 groupId

  • executions 标签内可以配置多个 execution 标签

    • id:指定唯一标识

    • phase:关联的生命周期阶段

    • goals/goal:关联指定生命周期的目标

      goals 标签中可以配置多个 goal 标签,表示一个生命周期环节可以对应当前插件的多个目标。

常用插件:

<build><plugins><!-- plugin 标签:这是我要指定的一个具体的插件 --><plugin><!-- 插件的坐标。此处引用的 maven-compiler-plugin 插件不是第三方的,是一个 Maven 自带的插件。 --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><!-- configuration 标签:配置 maven-compiler-plugin 插件 --><configuration><!-- 具体配置信息会因为插件不同、需求不同而有所差异 --><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><!--SpringBoot提供的用来改变Maven默认的打包行为--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.5</version></plugin></plugins>
</build>

<profile>

管理不同环境下的配置信息

没有在<profile>标签中的为默认的profile

激活profile

POM 中没有在 profile 标签里的就是默认的 profile,当然默认被激活

基于环境信息激活:

环境信息包含:JDK 版本、操作系统参数、文件、属性等各个方面。一个 profile 一旦被激活,那么它定义的所有配置都会覆盖原来 POM 中对应层次的元素。可参考下面的标签结构:

<profile><id>dev</id><activation><!-- 配置是否默认激活 --><activeByDefault>false</activeByDefault><jdk>1.5</jdk><os><name>Windows XP</name><family>Windows</family><arch>x86</arch><version>5.1.2600</version></os><property><name>mavenVersion</name><value>2.0.5</value></property><file><exists>file2.properties</exists><missing>file1.properties</missing></file></activation>
</profile>

Maven 3.2.2 开始:各条件均需满足该配置才会被激活。

多环境管理

<build><!-- profile对资源的操作 --><resources><resource><directory>src/main/resources</directory><!-- 先排除所有环境相关的配置文件 --><excludes><exclude>application*.yml</exclude></excludes></resource><resource><directory>src/main/resources</directory><!-- 是否替换@xx@表示的maven properties/yml属性值 --><!--通过开启 filtering,maven 会将properties/yml文件中的@xx@替换 profile 中定义的xx变量/属性--><filtering>true</filtering><includes><include>application.yml</include><include>application-${profileActive}.yml</include></includes></resource></resources>
</build><!--多环境文件配置-->
<profiles><!--开发环境--><profile><id>dev</id><activation><!--默认激活--><activeByDefault>true</activeByDefault></activation><properties><profileActive>dev</profileActive></properties></profile><!--测试环境--><profile><id>test</id><properties><profileActive>test</profileActive></properties></profile><!--正式环境--><profile><id>prod</id><properties><profileActive>prod</profileActive></properties></profile>
</profiles>

在打包的时候可以选择打包其中一个环境的包(可以理解为选定某个profile为active)

SpringBoot 天然支持多环境配置,一般来说,application.yml存放公共的配置,application-dev.ymlapplication-test.ymlapplication.prod.yml分别存放三个环境的配置。

配置文件示例:

# 在这里当选定环境后就会将@profileActive@替换,例如dev
spring:profiles:active: '@profileActive@'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/38182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

射频校准简略

射频电路功能的是否正常&#xff0c;在测试时就可发现&#xff0c;而怎么样使测试的数据正确&#xff0c;对测试的仪器进行校准是必不可少的环节&#xff0c;校准的目的就是减少测试的误差&#xff0c;使测试的仪器能够准确的反映待测件的性能&#xff0c;在校准过程中&#xf…

react学习——20react编写github案列

1、List组件 index.js import React, {Component} from "react"; //引入样式 import "./index.css"; export default class List extends Component {render() {const {users,isFirst,isLoding,err}this.propsreturn(<div className"row">…

注意!!2024《信息系统监理师》易混淆知识点来了,赶紧收藏

宝子们&#xff0c;在复习软考信息系统监理师中&#xff0c;是不是觉得有很多知识点含义比较相近&#xff0c;很多友友刚看的时候估计会像我一样迷迷糊糊的&#xff0c;作为一个软考老鸟&#xff0c;在这里给大家整理了信息系统监理师学习过程中易混淆的知识点&#xff0c;大家…

el-tree-transfer插件 入参说明

el-tree-transfer 是一个基于 Vue 和 Element-UI 的树形穿梭框组件&#xff0c;用于实现左右两侧树形结构数据的选择与移动功能。以下是一些基本的入参说明&#xff0c;根据收集到的信息整理得出&#xff1a; title: 类型: Array默认值: [未选, 已选]说明: 穿梭框左右两侧的标题…

Redux 使用及基本原理

什么是Redux Redux 是用于js应用的状态管理库&#xff0c;通常和React一起用。帮助开发者管理应用中各个组件之间的状态&#xff0c;使得状态的变化变得更加可预测和易于调试。 Redu也可以不和React组合使用。&#xff08;通常一起使用&#xff09; Redux 三大原则 单一数据源…

武汉星起航:无锡跨境电商加速“出海”,物流升级助品牌全球布局

随着全球化的不断深入&#xff0c;跨境电商作为数字外贸的新业态&#xff0c;正逐渐成为无锡企业拓展海外市场的重要渠道。武汉星起航关注到&#xff0c;近年来&#xff0c;无锡市通过积极推进国际物流枢纽建设&#xff0c;完善海外仓布局&#xff0c;以及各特色产业带的积极参…

2024 年江西省研究生数学建模竞赛题目 A题交通信号灯管理--完整思路、代码结果分享(仅供学习)

交通信号灯是指挥车辆通行的重要标志&#xff0c;由红灯、绿灯、 黄灯组成。红灯停、绿灯行&#xff0c;而黄灯则起到警示作用。交通 信号灯分为机动车信号灯、非机动车信号灯、人行横道信号 灯、方向指示灯等。 一般情况下&#xff0c;十字路口有东西向和南北向 4 个方向的车…

SpringSecurity中文文档(Servlet Session Management)

Authentication Persistence and Session Management 一旦您拥有了正在对请求进行身份验证的应用程序&#xff0c;就必须考虑如何在将来的请求中持久化和恢复结果身份验证。 默认情况下&#xff0c;这是自动完成的&#xff0c;因此不需要额外的代码&#xff0c;尽管了解 requ…

手机歌曲怎么转换成mp3格式,手机电脑都能轻松搞定

不同的手机和音乐应用可能支持不同的音频格式&#xff0c;而MP3作为一种广泛兼容的音频格式&#xff0c;因其体积小、音质相对较好的特点&#xff0c;至今仍被广泛使用。 如果您想将手机中的歌曲转换成MP3格式&#xff0c;以便于在更多设备上播放或节省存储空间&#xff0c;本…

iOS端授权页添加自定义按钮

如何添加自定义控件 基于一键登录的拉起授权页面功能&#xff0c;如果想要在我们的授权页面中添加自定义组件&#xff0c;例如使用其他方式登录的按钮&#xff0c;来实现其他方式登录功能&#xff0c;为用户呈现更多选择登录的方式。本文介绍如何在一键登录授权界面中实现添加…

机器学习之监督学习

整理一下机器学习中监督学习相关内容&#xff0c;争取梳理出一条易于理解和掌握的脉络。下面会有很多相关参考博客和文章&#xff0c;先放到一起&#xff0c;最后再做个整体的梳理。持续更新中。。。。。。 监督学习作为机器学习的核心分支&#xff0c;其理论体系与实践应用都…

C# 警告 warning MSB3884: 无法找到规则集文件“MinimumRecommendedRules.ruleset”

警告 warning MSB3884: 无法找到规则集文件“MinimumRecommendedRules.ruleset” C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.CSharp.CurrentVersion.targets(129,9): warning MSB3884: 无法找到规则集文件“MinimumRe…

竞赛选题 python的搜索引擎系统设计与实现

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python的搜索引擎系统设计与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;5分创新点&#xff1a;3分 该项目较为新颖&#xff…

正则表达式在Java中的应用与实例

正则表达式在Java中的应用与实例 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 正则表达式是一种强大的工具&#xff0c;用于模式匹配和字符串处理。在Java中…

武汉星起航:成功挂牌上股交,引领跨境电商行业进入全新发展阶段

2023年10月30日&#xff0c;武汉星起航电子商务有限公司在上海股权托管交易中心成功挂牌展示&#xff0c;这一里程碑式的事件标志着武汉星起航正式登陆资本市场&#xff0c;开启了公司发展的新篇章。作为亚马逊跨境电商领域的领军企业之一&#xff0c;武汉星起航此次挂牌不仅是…

文件操作详解(C语言)

1.为什么要用到文件&#xff1f;怎样数据才能持久化&#xff1f; 保存在内存中的数不安全&#xff08;一次断电&#xff0c;忘记保存&#xff0c;不用了还给系统&#xff09; 持久化&#xff1a;保存在硬盘上&#xff08;放在文件中&#xff09; 什么是文件&#xff1f;文件…

Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件

章节内容 上一节完成&#xff1a; HDFS的简介内容HDFS基础原理HDFS读文件流程HDFS写文件流程 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&#xff0c;但是没留下…

SpringSecurity的执行原理

SpringSecurity的执行原理&#xff1a;当我们服务端接收到请求后&#xff0c;首先通过DelegatingFilterProxy代理对象交互&#xff0c;转发给springsecurity的执行链&#xff0c;由于他自带的执行链有16条&#xff0c;我们将不用的过滤器进行了排除&#xff0c;同时加入了我们自…

如何保护应用?可快速部署的WAF服务器分享

Web应用攻击是安全事件和数据泄露的主要原因。相关统计表明&#xff0c;超过四分之三的网络犯罪直指应用及其漏洞。为保护数量日益增长的应用安全&#xff0c;Web应用防火墙(WAF)因此而生。本文则聚焦于WAF服务器&#xff0c;了解它的性能与具体的实践应用。   新加坡网络安全…