日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

maven 打包jar_Maven一定要会的这几个知识!

發布時間:2025/3/19 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 maven 打包jar_Maven一定要会的这几个知识! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方藍字關注我們

作者:CansluckCSDN博客:https://blog.csdn.net/xgx120413

一、Maven概念

? ? ? ? Maven是一個項目管理和整合工具。Maven為開發者提供了一套完整的構建生命周期框架。開發團隊幾乎不用花多少時間就能夠自動完成工程的基礎構建配置,因為Maven使用了一個標準的目錄結構和一個默認的構建生命周期。

? ? ? ??若有多個開發團隊環境的情況下,Maven能夠在很短的時間內使得每項工作都按照標準進行。因為大部分的工程配置都非常簡單且可復用,在創建報告、檢查、構建和測試自動配置時,Maven可以讓開發者的工作變得更簡單。

Maven的主要目的是為開發者提供:

  • 一個可復用、可維護、更易理解的工程綜合模型,與這個模型交互的插件或工具

  • Maven工程結構和內容定義在一個xml文件中(一般是pom.xml)

利用Maven構建項目過程階段:

二、Maven安裝配置

1.?JDK安裝

? ? ? ??Maven是基于Java的工具,所以配置Maven要做的第一件事就是安裝JDK

2.?Windows安裝

? ? ? ? Maven下載地址:http://maven.apache.org/download.html

? ? ? ??下載解壓后,添加環境變量即完成

3. Linux安裝

? ? ? ??① 配置yum源

# sudo yum install -y yum-utils# yum-config-manager --add-repo http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo

????????②?安裝Maven

# yum install -y apache-maven

完成安裝后,通過mvn --version?檢驗安裝版本

三、Maven初體驗

Maven主要是用來打jar、war包以及管理jar包

1. 原始的javac打包方式

假如我們有一個Hello.java文件,想要將它打成可執行jar包,一般這樣做。

使用 javac 命令和 jar 命令打包:

生成的jar包文件,由兩部分組成,class文件和META-INF目錄,如下:

此時的jar包,是不可直接運行的,需要指定入口main類

進入META-INF目錄,編輯MANIFEST.MF文件,如下:

運行此jar包,得到運行結果:

2.?maven打包

在pom文件內配置入口類

執行maven打包命令

mvn package

運行生成的jar,結果與原始方式無區別

四、POM結構

五、Maven流程

1.?maven的理想

maven像一種什么設計模式?答案:模板方法模式

自動走完標準的構建流程:清理->編譯->測試->報告->打包->部署

統一入口,所有配置在一個pom里搞定

2.?maven的約定

約定的目錄(不可改):

src/main/java –存放項目的.java文件

src/main/resources –存放項目資源文件。比方spring,hibernate配置文件

src/test/java –存放全部測試.java文件,比方JUnit測試類

src/test/resources ---測試資源文件

target ---項目輸出位置,編譯完畢后的東西放到這里面

pom.xml

3.?maven的生命周期
maven的構建生命周期,只是一個抽象的規范流程。周期內的每個階段的具體執行,是在插件里面來實現的。

各個生命周期預設的定義如下:

階段

處理

描述

驗證 validate

驗證項目

驗證項目是否正確且所有必須信息是可用的

編譯 compile

執行編譯

源代碼編譯在此階段完成

測試 Test

測試

使用適當的單元測試框架(例如JUnit)運行測試。

包裝 package

打包

創建JAR/WAR包如在 pom.xml 中定義提及的包

檢查 verify

檢查

對集成測試的結果進行檢查,以保證質量達標

安裝 install

安裝

安裝打包的項目到本地倉庫,以供其他項目使用

部署 deploy

部署

拷貝最終的工程包到遠程倉庫中,以共享給其他開發人員和工程

運行任何一個階段,都會從其所在生命周期的第一個階段開始,順序執行到指定的階段,如:

mvn package(本義:執行default周期的package階段,maven會自動從process-resources階段開始運行到package階段結束)

4.?maven的插件

插件plugin是綁定到生命周期,承擔實際功能的組件。mvn運行時,自動關聯插件來運行

下圖是maven默認的各階段對應的插件列表:

生命周期

生命周期階段

插件目標

執行任務

clean

pre-clean

clean

maven-clean-plugin:clean

刪除項目的輸出目錄。

post-clean

site

pre-site

site

maven-site-plugin:site

post-site

site-deploy

maven-site-plugin:deploy

default

process-resources

maven-resources-plugin:resources

復制主資源文件至主輸出目錄

compile

maven-compiler-plugin:compile

編譯主代碼至主輸出目錄

process-test-resources

maven-resources-plugin:testResources

復制測試資源文件至測試輸出目

test-compile

maven-compiler-plugin:testCompile

編譯測試代碼至測試輸出目錄

test

maven-surefire-plugin:test

執行測試用例

package

maven-jar-plugin:jar(ejb:ejb jar:jar rar:rar war:war)

創建項目jar包

install

maven-install-plugin:install

將項目輸出構件安裝到本地倉庫

deploy

maven-deploy-plugin:deploy

將項目輸出構件部署到遠程倉庫

六、常用Maven命令

mvn clean? 清理

mvn compile 編譯主程序

mvn package 打包

mvn install 安裝jar到本地庫

使用maven命令生成項目(idea和eclipse生成項目最終也是依賴maven插件生成的):

mvn archetype:generate -DgroupId=enjoy -DartifactId=simple -DarchetypeArtifactId=maven-archetype-quickstart??-Dversion=1.0

mvn archetype:generate -DgroupId=enjoy -DartifactId=simple-web -DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0??

七、Maven插件開發

可以自定義插件,來擴展maven的功能。插件的開發步驟如下:

1.?引入maven api依賴

2.?編寫簡單Mojo類(繼承AbstractMojo)

3.?執行插件

mvn com.enjoy:enjoy-plugin:1.0:log

4.?關聯插件到生命周期來執行

構建項目對應的生命周期

八、Maven坐標與依賴

1.?坐標

--------在數學中, 任何一個坐標可以唯一確定一個“點”

Maven 中坐標是Jar包的唯一標識

坐標元素包括groupId、artifactId、version、packaging:

元素描述說明
groupId

定義當前模塊隸屬的實際

Maven項目

中小企業常常直接對應公司、組織
artifactId定義實際項目中的一個Maven模塊唯一標識一個模塊
version定義當前項目所屬版本

SNAPSHOT:表示不穩定版本

LATEST:指最新發布的版本,可能是個發布版,也可能是一個snapshot版本

RELEASE:指最后一個發布版

packaging定義Maven項目打包方式有jar(默認)、war、pom、maven-plugin等
dassifier附屬構建(如javadoc、sources)須有附加插件的幫助

2.?依賴

依賴即:A->B,B->C,C->D這種項目間的依存關系。

在java的jvm內,依賴的最終表現是,項目A啟動時,其依賴的jar包必須都對應放入其classpath路徑內。

3.?依賴傳遞

上述過程中,項目Mall歸結起來,依賴的fastjson會有三個版本。

而我們的jvm最終肯定只能接受一個版本的jar,所以必須有所取舍。

maven默認的取舍規則是:

1、路徑最短原則:product和customer里的fastjson引用路徑較短,路徑為兩步;pay項目里的fastjson引用路徑較長,路徑為三步。因此pay中的fastjson被淘汰;

2、同路徑長度下,誰先聲明誰優先:product和customer中的fastjson路徑相同,那么就看在pom中是先聲明product還是先聲明customer,誰先用誰的。

4.?依賴沖突及解決

在依賴傳遞里,我們看到,maven根據自己的規則為我們取舍出了一個版本的jar,但此jar版本選擇可能會與我們的項目預期不符:

例如:我們最終想的版本是fastjson:1.2.30版本(但它在第一步即被淘汰掉了)

當出現此類情況時,我們項目運行可能會出錯(項目中使用到了1.2.30版本的特性),此問題即是我們常遇到的jar包沖突問題。

補救方式:使用exclusions將product和customer中的fastjson包排除掉,用法如下圖:

當發生jar沖突程序報錯時,可以使用mvn命令查出項目最終依賴的jar包樹,看版本是否是我們預期的:

命令:mvn dependency:tree

5. 依賴范圍scope

mvn在運行時,生命周期的不同階段,會有不同的依賴范圍,一般有以下依賴范圍scope:

- compile:默認范圍,用于編譯(依賴的jar在打包時會包含進去) ? ? ?

- provided:類似于編譯,但支持你期待jdk或者容器提供,類似于classpath(依賴的jar在打包時不會包含進去)

- runtime:在執行時需要使用(依賴的jar在打包時會包含進去)

- test:用于test任務時使用(依賴的jar在打包時不會包含進去)

- system:需要外在提供相應的元素。通過systemPath來取得(一般禁止使用)

每個scope實際上是配置了一個不同的classpath,jvm根據選擇不同的classpath來達到依賴不同

九、環境激活-profiles使用

在springmvc項目中,開發/測試/線上三個不同環境,配置文件往往也不同。

打包時需要對配置文件做出選擇(maven提供了profiles機制供我們使用)。

1. profiles的場景

這個選擇,實際發生在default生命周期的resource階段(maven-resources-plugin執行過程里)

2.?定義profiles

為了指導插件將對應的resource文件打入classpath里,先定出profiles

此定義即指,當mvn命令執行時,我們需要通過 -P dev或者-P test方式傳入我們的意圖:

dev/test選擇,會導致properties里的變量值含義不同,我們主要關注package.environment變量

3.?資源插件的配置指定

配置maven-resources-plugin插件執行時,要復制的目錄資源

4.?mvn約定的資源中需要過濾掉環境目錄

需要將mvn約定的資源目錄里,過濾掉環境目錄

5.?小屬性更輕便的用法

對于簡單的屬性,我們可以選擇更輕便的用法

①?直接在環境中定義屬性值

②?項目屬性文件配置

③?約定的資源啟用替換過濾

更多精彩敬請關注公眾號

Java極客思維

微信掃一掃,關注公眾號

總結

以上是生活随笔為你收集整理的maven 打包jar_Maven一定要会的这几个知识!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久热亚洲 | 99精品视频在线观看 | 五月少妇| av官网在线 | 岛国av毛片| 国产理论视频 | 精品无码久久久久久久久果冻 | 日本黄页网站免费大全 | 黄色av网站在线观看 | 97超碰碰碰 | 97视频免费 | 久久一区二区三区四区 | 在线观看欧美精品 | 中日韩中文字幕一区二区 | 欧美一级淫片007 | 亚洲一区二区视频在线播放 | 国产精品久久久久一区二区 | 视频久久 | 日韩在线视频网站 | 欧美巨大乳 | 日韩经典一区 | 天堂素人约啪 | 亚洲AV无码成人片在线观看 | 日本电车痴汉 | 欧美亚洲韩国 | 欧美三级小说 | 中文字幕视频一区 | 久久精品a | www.色com | 一级女性全黄久久生活片免费 | 人妻一区二区三区四区五区 | 毛片基地在线观看 | 日本成人一区二区三区 | 韩日视频在线观看 | 天堂а√在线最新版中文在线 | 深夜福利影院 | 男女搞黄网站 | 91天天看 | 日本熟女毛茸茸 | 99爱99| 在线a级 | 欧美岛国国产 | 奇米888一区二区三区 | 国产精品自拍视频一区 | 97人人爽 | 老熟妇一区二区三区啪啪 | 激情图片在线视频 | av中文字幕免费在线观看 | 欧美精品中文 | 日本高清无吗 | 欧美大片视频在线观看 | 美女隐私无遮挡网站 | 美女午夜激情 | 我们的2018在线观看免费高清 | 亚洲欧美色视频 | 国产伦精品一区二区三区高清版禁 | 国产成人精品电影 | 免费高清黄色 | 黄色永久免费网站 | 久久极品 | 久草免费在线观看视频 | 欧美91视频 | 欧洲成人午夜精品无码区久久 | 9999av| 色婷婷热久久 | 精品一区二区三区视频 | 三级爱爱 | 福利一区福利二区 | 超碰免费人人 | 人人澡超碰碰97碰碰碰 | 午夜男人网| 中文字幕 视频一区 | 日韩欧美国产一区二区 | 一区二区三区视频在线免费观看 | 可以免费看的av毛片 | 少妇人妻偷人精品无码视频 | www.jizzjizz.com| 69成人网 | 欧美黑人疯狂性受xxxxx野外 | 中文字幕视频 | 91视频青青草 | 春草| 国产精品成人免费视频 | jul023被夫上司连续侵犯 | 欧美精品videos| 久久久精品国产 | 亚洲天堂网视频 | 亚洲国产精品无码专区 | 国产山村乱淫老妇女视频 | 天天干人人 | 成人一区二区视频 | 偷拍老头老太高潮抽搐 | 日韩高清精品免费观看 | 国产一区二区三区在线观看视频 | 亚洲自拍偷拍一区 | 一区二区三区手机在线观看 | 丰满熟妇人妻av无码区 | 成人91免费视频 | 中文字幕一区二区三区四区欧美 |