Maven基礎及概念

前言

今天就來聊聊Maven的基礎和一些比較概念性的東西,還有一些常用的Maven命令啥的,主要是某人腦子記不住,記在博客中讓她自己看吧,省的費心給她找。

后續的文章會聊到Maven的一些比較高級用法,像自定義插件,私服啥的,歡迎各位大佬來討論哦!

概念

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

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

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

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

Maven 工程結構和內容被定義在一個 xml 文件中(即談到的pom.xml)

安裝配置

Maven 是一個基于 Java 的工具,所以要做的第一件事情就是安裝 JDK。

官網下載后解壓即可,一般都是在開發工具里面配置Maven的位置就可以了,如果喜歡敲命令的話,那就添加一下環境變量。

然后配置一下本地倉庫地址和鏡像倉庫,提供一下示例:

maven下載地址:Maven – Download Apache Maven?

JDK原生打包

在Maven工具出現之前,基本上用的都是Ant(打包構建項目工具)打包,由于現在Maven越來越流行,使用Ant打包的項目就越來越少了,這些工具基本上都是通過對JDK原生打包的方式進行了一層封裝,編譯打包底層還是基于JDK帶有的工具實現的。

現有一個demo測試項目,結構路徑如下:

?我們進入到這個src的目錄里面,使用命令進行編譯:

?編譯好后就可以進行打包成jar包文件了,jar文件又分為兩種,一種是直接被引用的jar包,另外一種是可以直接執行的可執行jar包,打包命令如下:

?這時打的包僅是一個普通的jar包,如果要打成可執行包的話,那么就得引用一個MANIFEST.MF文件了,JDK也是根據這個文件加載相關的類信息的,新建一個manifest.txt文件,內容如下(每個冒號后面都需要有空格,每行都需換行)

Manifest-Version: 1.0
Created-By: 1.8.0_101 (Oracle Corporation)
Main-Class: com.compile.App

執行一下命令

這樣打出來的jar包就是可執行包啦。使用以下命令啟動jar包

?java -jar compile.jar

使用Maven打包

我們需要創建一個Maven Project項目,我們這里使用quickstart原型(快速創建)

創建好后再pom.xml里面的build標簽里面添加Maven打包插件,如果不需要可執行jar包的話,把configuration標簽去掉就好了

?POM結構

先放在這里,起碼有個概念,會在后面的博文中講到

?Maven項目結構

項目結構是一個約定好了的目錄,如果有些改動的話,可能項目都不能正常運行或打包(博主碰到過一次,賊難受)

約定的目錄(不可改):

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

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

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

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

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

pom.xml

Maven生命周期

在?Maven的的生命周期里面,理想的標準構建流程為:清理->編譯 -> 測試 ->?報告 ->?打包 ->?部署。并且在一個pom.xml里面全部搞定

而Maven只是一個抽象規范流程,每個周期里面的流程是有具體的插件來執行的

?而每個生命周期的預設如下:

階段處理描述
驗證 validate驗證項目驗證項目是否正確且所有必須信息是可用的
編譯 compile執行編譯源代碼編譯在此階段完成
測試 Test測試使用適當的單元測試框架(例如JUnit)運行測試。
包裝 package打包創建JAR/WAR包如在 pom.xml 中定義提及的包
檢查 verify檢查對集成測試的結果進行檢查,以保證質量達標
安裝 install安裝安裝打包的項目到本地倉庫,以供其他項目使用
部署 deploy部署拷貝最終的工程包到遠程倉庫中,以共享給其他開發人員和工程

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

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

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:jarejb: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到本地庫

mvn dependency:tree?將當前項目pom.xml中引入的依賴打印出來

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

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

相關文章

織夢縮略圖自動補齊絕對路徑_織夢生成文章內容縮略圖時自動加上域名絕對路徑...

今天又接了個織夢CMS的有償服務,客戶想要后臺添加文章內容的時候,縮略圖自動變成帶上絕對路徑的格式.比如我們默認的縮略圖是這樣的 /uploads/allimg/150814/123P2NB-0-lp.png 他想要的效果是這樣的 http://www.youwujun.com.cn/uploads/allimg/150814/123P2NB-0-lp.png大家懂我…

BUAA 436 孟竹的復習計劃(二維樹狀數組)

題目鏈接:http://acm.buaa.edu.cn/problem/436/ 題意:一個數列兩種操作:(1)將某個位置的數字改成另一個數字;(2)交換兩個位置的數字。每次操作之后輸出逆序數的個數。 思路&#xff…

Maven之pom.xml常用標簽解析及鏡像配置

前言 Maven僅僅是個打包工具而已,個人覺得沒有太大必要花費在打包工具上,這里就列舉一下個人覺得會常用標簽的使用就好了,原理啥的基本就不太會去深度了解了,如果以后遇到需了解Maven工作原理的工作的話,到時候一定分…

idea 導入svn代碼_idea導入svn項目

起初和導入git項目一樣,file - new - project from version control - ,這后面選 subversion。在打開的 checkout from subversion對話框中,輸入svn地址,比如 svn://11.22.33.44/demo。添加一個后,展開新加項&#xff…

由mysql8降級到mysql5

最近在研究liferay的使用。liferay可以連接mysql數據庫。電腦中裝的mysql的最新版本是mysql8。于是開始按照liferay的要求進行連接。但是多番嘗試后,均報錯:java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast …

tf計算矩陣維度_tensorflow中關于 多維tensor的運算(tf.multiply, tf.matmul, tf.tensordot)...

multiply 等同與* ,用于計算矩陣之間的element-wise 乘法,要求矩陣的形狀必須一致(或者是其中一個維度為1),否則會報錯:import tensorflow as tfa tf.constant([1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12], shape[2, 3, 2])b tf.con…

Maven高級之插件開發

前言 終于來到了Maven的插件開發,其實Maven的插件并沒有想象的那么難,剛開始講Maven基礎的時候就演示了一下JDK是如何打包的,Maven打包只是在JDK打包上封裝了一層而已,Maven也支持自定義插件開發 創建 我們先使用quickstart原型…

HTTP1.1新增了五種請求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 、 CONNECT

200 (成功) 服務器已成功處理了請求。 通常,這表示服務器提供了請求的網頁。 201 (已創建) 請求成功并且服務器創建了新的資源。 202 (已接受) 服務器已接受請求,但尚未處…

katalon進行app測試_Katalon API 測試 Demo

為何選擇Katalon符合我們當下的情況,測試需要借助現有工具提高測試效率以及提高測試質量;為何不自己寫代碼?不是只有自己寫的框架才是最好的,合適的才是最好的;katalon 支持ui、mobile、api 同時也支持腳本模式&#x…

Maven高級之archetype(原型/骨架)開發

前言 archetype這個的主要功能就是將寫好的項目模塊打包成一個原型,然后提供給其他人使用,這樣別人就可以快速使用這個項目模板了。 這個東西雖然很多人都基本用不上,但原型這個東西用的好還是很方便的,能夠在開發新項目上省去大…

深度學習在搜索業務中的探索與實踐

本文根據美團高級技術專家翟藝濤在2018 QCon全球軟件開發大會上的演講內容整理而成,內容有修改。引言 2018年12月31日,美團酒店單日入住間夜突破200萬,再次創下行業的新紀錄,而酒店搜索在其中起到了非常重要的作用。本文會首先介紹…

cesium面積計算_cesium-長度測量和面積測量

(更新)多謝網友的提醒,面積測量的小問題已經修改,經測試可正常使用網上找的大神的實現方法有點問題,實現有一些bug,作為cesium新手一個,棄之不忍,只好硬著頭皮修改了,不過還好問題不大&#xff…

SpringBoot自動配置原理流程

前言 新公司太忙了,都沒啥空更新博客,就隨便記錄一下以前的學習筆記吧。SpringBoot是基于Spring上的衍生框架,只要看懂了Spring的話,學這個就比較簡單了;SpringBoot也是在當前微服務時代下流行的框架,并且…

算法:對象方式數組去重

var arr [3, 1, 1, 4 , 2 , 4 , 2 , 4 , 2, 1, 1, 3, 3, 3];var ary[];var obj{};for(var i0;i<arr.length;i){var curarr[i];if(!obj[cur]){obj[cur]cur;ary.push(cur);}}console.log(ary); 復制代碼

python實現路由功能_python 實現重啟路由器

有一些服務&#xff0c;需要動態IP&#xff0c;所以我們用重啟路由器的方法實現。人工重啟不可選&#xff0c;用定時腳本執行即可。貼代碼&#xff0c;每種路由器&#xff0c;提示不一樣。需要路由器有telnet功能才行。#!/usr/bin/env python# -*- coding: utf-8 -*-import tel…

SpringBoot自定義Starter(自動配置類)

前言 SpringBoot其實從誕生以來圍繞的核心就是快速構建項目&#xff0c;快速構建的前提是有人幫你做好輪子&#xff0c;開發者只要拿來即用就好了&#xff0c;而造好輪子的人就是SpringBoot的開發者&#xff0c;引入自動配置的形式幫助開發者快速創建項目&#xff0c;而自動配…

Java并發編程之synchronized關鍵字解析

前言 公司加班太狠了&#xff0c;都沒啥時間充電&#xff0c;這周終于結束了。這次整理了Java并發編程里面的synchronized關鍵字&#xff0c;又稱為隱式鎖&#xff0c;與JUC包中的Lock顯示鎖相對應&#xff1b;這個關鍵字從Java誕生開始就有&#xff0c;稱之為重量級鎖&#xf…

raidrive安裝失敗_記一次RaiDrive映射OneDrive遇到的問題

大概在1周以前&#xff0c;出于需要存放直播錄像的原因&#xff0c;根據別人的視頻教程去自己動手搞了個5T網盤的帳號。(體驗一下&#xff0c;其實我還同時存一份在百度云&#xff0c;怕不穩定)用RaiDrive創建OneDrive的映射&#xff0c;在這步驟點確定后&#xff0c;會彈出微軟…

通過代理模式 + 責任鏈模式實現對目標執行方法攔截和增強功能

前言 最近需要實現一個插件功能&#xff0c;但是如果做成兩個接口的話&#xff08;即執行前和執行后&#xff09;&#xff0c;那么會降低插件的可玩性&#xff0c;所以需做成類似AOP的環繞通知形式&#xff0c;所以就使用到了責任鏈模式和代理模式進行實現。 介紹 代理模式(P…

Javascript基礎之-原型(prototype)

首先呢&#xff0c;prototype是對象里的一個內置屬性&#xff0c;并且呢&#xff0c;這個屬性是對于其他對象的一個引用。所以呢&#xff0c;思考下面的例子&#xff1a; var obj {a: 2 } var myObj Object.create(obj); console.log(myObj.a); // 2 console.log(myObj obj)…