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.pswp.cn/web/38182.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38182.shtml
英文地址,請注明出處:http://en.pswp.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;了解它的性能與具體的實踐應用。   新加坡網絡安全…