Maven基礎總結

前言

Maven 是一個項目管理工具,可以對 Java 項目進行構建、依賴管理。

基本要求掌握

配置Maven環境直接查。

得會在IDEA創建Maven的java項目吧、會創建Maven的web項目吧、會創建多模塊項目吧。

得會配置插件pligin、依賴dependency吧

一、Maven四大特性

1、依賴管理系統

由于寫項目需要導入非常多jar包,由于版本依賴,需要下載指定版本并且需要后續升級版本,手動麻煩!

操作:在配置文件內寫好jar包的倉庫路徑、名稱、版本,他會自動把所有指定的jar包下載好。

<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version>
</dependency>

坐標屬性:

groupId: 定義實際項目-公司名稱(jar包所在倉庫路徑);

artifactId:定義Maven模塊-項目名;

version:定義版本。

2、多模塊構建

在 Maven 中需要定義一個 parent POM 作為一組 module 的聚合 POM。?????????????????????????????????????? 在該 POM 中可用 <modules> 標簽定義一組子模塊。??????????????????????????????????????????????????????? ?????? ?????? parent POM 中的 build 配置以及依賴配置都會自動繼承給子模塊。

3、統一的項目結構

??????? 不同IDE項目結構不同,但是只要是Maven管理的項目,項目結構一致,避免不同IDE打開產生錯誤。

4、統一的構建模型和插件機制

通過插件(plugin)形式引入服務器

<plugin>  <groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><version>6.1.25</version><configuration><scanIntervalSeconds>10</scanIntervalSeconds><contextPath>/test</contextPath></configuration>
</plugin>

二、Maven環境變量配置

mvn -v查看Maven版本,如果沒有配置,上網看教程安裝配置maven環境變量(Mac版)_ElenaYu的博客-CSDN博客

1、下載壓縮包到自己選定的文件夾

2、設置鏡像源、指定jar包倉庫路徑

3、編輯環境變量配置文件 重啟。成功

三、IDEA集成Maven環境

注意要全局配置Maven環境。如果僅僅是局部配置僅針對當前項目,新項目仍需重新配置。

① 你的 maven 安裝目錄。
② 你的 maven setting.xml 文件
③ 你的 maven 倉庫,所有下載的 jar 包都會緩存到這個文件夾。

四、Maven創建Java項目

1、創建new project 選擇Maven

?2、自定義項目名及目錄名

?3、項目存儲信息核對

顯示出src目錄結構需要等待一段時間。

4、往pom.xml文件寫入配置信息

5、手動創建目錄并標記

手動創建resources 【directory目錄】 此時此目錄為普通目錄。?????????????????????????????????????????????????????? Mark標記為resources root讓Maven識別為資源目錄

6、使用Maven命令處理項目

如編譯、打包為jar包供其他項目使用

五、Maven創建Web項目

與創建Java項目類似。

1、創建new project 選擇模板

?2、自定義項目名、目錄名

?3、項目存儲信息核對

?4、修改pom.xml配置信息

Webapp目錄存放資源 jsp頁面 html頁面等。

?1、刪除插件管理

(以下內容直接刪除)

<pluginManagement><plugins><plugin></plugin>
...</plugins>
</pluginManagement>

?2、添加服務器插件配置信息

普通Java項目只需要打包 或者編譯就可以;Web項目需要看見頁面,需要服務器支持,有jetty 和 Tomcat倆類任選一。使用服務器要去其官網下載對應的Maven插件,將服務器的插件配置文件粘貼上。

五、Maven倉庫

常下載的文件:jar包 & 插件

分類:

????????遠程倉庫 :中央倉庫(https://mvnrepository.com/? )、私服、其他公共庫

????????本地倉庫

Maven根據坐標尋找構件時,首先查看本地倉庫,有就用,沒有就遠程倉庫查找下載到本地倉庫。

私服也就是本局域網內的鏡像源。

六、Maven環境下構建多模塊項目

作用:精簡化項目

創建Java項目,注意勾選SDK版本

1、創建父模塊與子模塊

1、創建maven_parent模塊

?2、創建maven_dao模塊

1、在maven_parent基礎上創建模塊

?2、選擇模板

3、創建maven_service模塊

與創建maven_dao模塊一模一樣

4、創建maven_controller模塊

與創建maven_dao模塊只有一個區別:在選擇模版時選擇Webapp

2、設置模塊配置文件

設置jdk版本(1.8)、單元測試junit版本、刪除多余配置(<pluginManagement>插件管理所有內容)

3、設置模塊之間的依賴

controller模塊要依賴service模塊,service模塊要依賴dao模塊。即controller要調用service內方法,service要調用dao內方法。

對應的操作就是:在service配置文件中添加dao的<dependency>

?在controller配置文件中添加service的<dependency>

<!--Web層要創建servlet 引入servlet的API--> 在mvn倉庫搜索servlet版本就可以找到對應的dependency

maven_controller模塊里面是Webapp模塊,需要手動創建Java包并定義為source root 才可以創建類

七、Maven的打包操作

jar包:Java項目的壓縮包????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? war包:Web項目的壓縮包

通過pom.xml配置方式實現打包時的環境選擇。

1、添加對應的目錄結構

????????1、web項目一般無java文件夾,手動添加并標記

???????? 2、手動添加sources目錄并標記、并添加配置文件

2、在pom.xml配置文件中添加Profile配置

3、添加資源文件配置

添加到pom.xml的build標簽內

?

?4、執行打包操作

?

?-P指定要打包的profile的id?

skip表示跳過測試的打包

八、Maven依賴的基本概念

1、格式舉例:

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope>
</dependency>

2、三個元素:

1、依賴的基本坐標:groupId, artifactId, version(Maven根據坐標才能找到需要的依賴)

2、依賴的類型:Type (大部分情況下不需要聲明。 默認值為jar)

3、依賴的范圍:Scope (compile,test,provided,runtime,system)

4. Optional:標記依賴是否可選

5. Exclusions: 用來排除傳遞性依賴

*compile: 編譯依賴范圍。

若無指定,則默認使用該依賴范圍。使用此依賴范圍的Maven依賴,對于編譯、測試、運行三種classpath都有效。

*test: 測試依賴范圍。

使用此依賴范圍的Maven依賴,只對于測試classpath有效,在編譯主代碼或運行項目的使用時將無法使用此類依賴。典型的例子就是JUnit,它只有在編譯測試代碼及運行測試的時候才需要。

*provided: 已提供依賴范圍。

?? 使用此依賴范圍的Maven依賴,對于編譯和測試classpath有效,但在運行時無效。例servlet-api,編譯和測試項目的時候需要該依賴,但在運行項目的時候,由于容器已經提供,就不需要Maven重復地引入一遍(如:servlet-api)

*runtime: 運行時依賴范圍。

使用此依賴范圍的Maven依賴,對于測試和運行classpath有效,編譯主代碼時無效。例JDBC驅動實現,項目主代碼的編譯只需要JDK提供的JDBC接口,只有在執行測試或運行項目的時候才需要實現上述接口的具體JDBC驅動。

*system: 系統依賴范圍。

? 該依賴與三種classpath的關系,和provided依賴范圍完全一致。但使用system范圍依賴時必須通過systemPath元素顯式地指定依賴文件的路徑。由于此類依賴不是通過Maven倉庫解析的,而且往往與本機系統綁定,可能造成構建的不可移植,因此應該謹慎使用。

3、傳遞性依賴

??? 傳遞依賴機制, 讓我們在使用某個jar的時候就不用去考慮它依賴了什么。也不用擔心引入多余的依賴。 Maven會解析各個直接依賴的POM,將那些必要的間接依賴,以傳遞性依賴的形式引入到當前項目中。

注意: 傳遞依賴有可能產生沖突!!

A --> B --> C (2.0)
A --> E --> C (1.0)

如果A下同時存在兩個不同version的C,沖突!!

(使用exclusions標簽選取同時適合A、B的版本)

<dependencies>  <dependency>  <groupId>A</groupId>  <artifactId>A</artifactId>  <version>xxx</version>  <exclusions>  <exclusion>  <groupId>C</groupId>  <artifactId>C</artifactId></exclusion>  </exclusions>  </dependency><dependency>  <groupId>B</groupId>  <artifactId>B</artifactId>              </dependency>  
</dependencies>
這里的<exclusions> <exclusion> <groupId>C</groupId> <artifactId>C</artifactId></exclusion> </exclusions> 來排除沖突的

結尾:常見錯誤

1、pom.xml配置文件爆紅解決

原因:依賴包下載不了

IDEA中Maven依賴包下載不了的問題解決方案匯總_idea maven包下載不下來_謎一樣的碼農的博客-CSDN博客

2、Cannot resolve symbol ‘HttpServlet‘

手動添加jar包

Cannot resolve symbol ‘HttpServlet‘_DarkYoung?的博客-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35474.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35474.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35474.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS:服務器字體 與 響應式布局(用法 + 例子 + 效果)

文章目錄 服務器字體定義 服務器字體使用例子 響應式布局設備類型設備特性例子 服務器字體 解決字體不一致而產生的。 首先&#xff0c;在網上把字體下載好。 定義 服務器字體 font-face{font-family:字體名稱;src:url(字體資源路徑); }使用 在需要使用的選擇器里加上 font…

數學建模(一)前繼概念

課程推薦&#xff1a;數學建模老哥_嗶哩嗶哩_bilibili 目錄 一、什么是數學建模&#xff1f; 二、數學建模的一般步驟 三、數學建模賽題類型 1.預測型 2. 評價類 3.機理分析類 4. 優化類 一、什么是數學建模&#xff1f; 數學建模是利用數學方法解決實際問題的一種實踐。…

什么是多線程?進程和線程的區別是什么?如何使用Java實現多線程?

文章目錄 前言我們為什么要使用線程而不是進程來實現并發編程什么是線程進程和線程的區別如何使用Java實現多線程創建線程1.創建一個繼承 Thread 類的線程類2.實現 Runnable 接口匿名內部類方式實現 Runnable 接口lambda 表達式實現 Runnable 接口 Thread 類的常見構造方法Thre…

T113-S3-RTL8211網口phy芯片調試

目錄 前言 一、RTL8211介紹 二、硬件連接 三、設備樹配置 四、內核配置 五、phy芯片配置 六、調試問題 總結 前言 在嵌入式系統開發中&#xff0c;網絡連接是至關重要的一部分。T113-S3開發板搭載了RTL8211系列的網口PHY芯片&#xff0c;用于實現以太網連接。在開發過程…

C++ QT(二)

目錄 Qt 控件按鈕QPushButton控件簡介用法示例運行效果 QToolButton控件簡介用法示例運行效果 QRadioButton控件簡介用法示例運行效果 QCheckBox控件簡介用法示例運行效果 QCommandLinkButton控件簡介用法示例運行效果 QDialogButtonBox控件簡介用法示例運行效果 輸入窗口部件Q…

用 React+ts 實現無縫滾動的走馬燈

一、走馬燈的作用 走馬燈是一種常見的網頁交互組件&#xff0c;可以展示多張圖片或者內容&#xff0c;通過自動播放或者手動切換的方式&#xff0c;讓用戶能夠方便地瀏覽多張圖片或者內容。 本次實現的不是輪播圖而是像傳送帶一樣的無限滾動的形式。 二、需求梳理 走馬燈可設…

Go Gin 中使用 JWT

一、JWT JWT全稱JSON Web Token是一種跨域認證解決方案&#xff0c;屬于一個開放的標準&#xff0c;它規定了一種Token實現方式&#xff0c;目前多用于前后端分離項目和OAuth2.0業務場景下。 二、為什么要用在你的Gin中使用JWT 傳統的Cookie-Sesson模式占用服務器內存, 拓展性…

uniapp實現自定義導航內容高度居中(兼容APP端以及小程序端與膠囊對齊)

①效果圖如下 1.小程序端與膠囊對齊 2.APP端內容區域居中 注意&#xff1a;上面使用的是colorui里面的自定義導航樣式。 ②思路&#xff1a; 1.APP端和小程序端走不同的方法&#xff0c;因為小程序端要計算不同屏幕下右側膠囊的高度。 2.其次最重要的要清晰App端和小程序端…

【數學建模】清風數模更新5 灰色關聯分析

灰色關聯分析綜述 諸如經濟系統、生態系統、社會系統等抽象系統都包含許多因素&#xff0c;系統整體的發展受各個因素共同影響。 為了更好地推動系統發展&#xff0c;我們需要清楚哪些因素是主要的&#xff0c;哪些是次要的&#xff0c;哪些是積極的&#xff0c;哪些是消極的…

網絡基礎——網絡的由來與發展史

作者&#xff1a;Insist-- 個人主頁&#xff1a;insist--個人主頁 作者會持續更新網絡知識和python基礎知識&#xff0c;期待你的關注 目錄 一、網絡的由來 二、計算機網絡的發展史 1、第一階段 2、第二階段 3、第三階段 前言 每天都是使用網絡&#xff0c;那么你知道網絡…

FPGA----Vivado SDK創建并使用靜態鏈接庫(C/C++代碼移植)

1、在進行SoC開發時&#xff0c;PS端的C/C代碼可能涉及到核心算法需要移植操作&#xff0c;為此&#xff0c;本文講述了如何將C/C代碼打包為.a文件供程序調用 2、文章以我的程序為例&#xff0c;逐步講述代碼生成靜態鏈接庫并調用的方法。 下面是我程序的目錄結構&#xff0c…

spring boot實現實體類參數自定義校驗

安裝依賴項 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>1、新建實體類 Data public class UserEntity {private String name;private Integer age;…

RocketMQ 延遲消息

RocketMQ 延遲消息 RocketMQ 消費者啟動流程 什么是延遲消息 RocketMQ 延遲消息是指&#xff0c;生產者發送消息給消費者消息&#xff0c;消費者需要等待一段時間后才能消費到。 使用場景 用戶下單之后&#xff0c;15分鐘未支付&#xff0c;對支付賬單進行提醒或者關單處理…

PostgreSQL查詢慢sql原因和優化方案

PostgreSQL sql查詢慢優化方案有一下幾種解決方案&#xff1a; 1.關閉會話 查詢慢sql的執行會話&#xff0c;關閉進程。 查看數據庫后臺連接進程 SELECT count(*) FROM pg_stat_activity;SELECT * FROM pg_stat_activity; 查看數據庫后臺連接進程&#xff0c;但是此條SQL不…

python提取pdf圖片

import fitz import re import osdef save_pdf_img(path, save_path):path: pdf的路徑save_path : 圖片存儲的路徑# 使用正則表達式來查找圖片checkXO r"/Type(? */XObject)"checkIM r"/Subtype(? */Image)"# 打開pdfdoc fitz.open(path)# 圖片計數im…

用HARU-Net增強核分割:一種基于混合注意的殘差u塊網絡

文章目錄 Enhancing Nucleus Segmentation with HARU-Net: A Hybrid Attention Based Residual U-Blocks Network摘要本文方法損失函數后處理消融實驗 Enhancing Nucleus Segmentation with HARU-Net: A Hybrid Attention Based Residual U-Blocks Network 摘要 核圖像分割是…

W6100-EVB-PICO 做TCP Server進行回環測試(六)

前言 上一章我們用W6100-EVB-PICO開發板做TCP 客戶端連接服務器進行數據回環測試&#xff0c;那么本章將用開發板做TCP服務器來進行數據回環測試。 TCP是什么&#xff1f;什么是TCP Server&#xff1f;能干什么&#xff1f; TCP (Transmission Control Protocol) 是一種面向連…

zabbix監控安裝部署

目錄 一、環境 二、配置 1.配置yum源&#xff0c;這里用的清華的 2.過濾一下安裝包&#xff0c;查看依賴包 安裝依賴包 3.配置數據庫 開機自啟 創建數據庫 創建用戶 授權 導入數據到數據庫 查看zabbix數據庫有沒有表和數據 4.修改zabbix配置文件 1.修改zabbix配置…

去趨勢化一個心電圖信號、信號功率譜、低通IIR濾波器并平滑信號、對濾波器引起的延遲進行補償研究(Matlab代碼實現)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

SPM實現framework自動管理和分發

一、前言 Swift Package Manager (SPM) 是蘋果官方提供的用于管理 Swift 項目的依賴關系和構建過程的工具。它是一個集成在 Swift 編程語言中的包管理器&#xff0c;用于解決在開發過程中管理和構建包依賴項的需求。 那么如何使用SPM管理和分發Objective C編寫的二進制庫呢&a…