1 引入
在日常 Java 開發中,Maven 應該是必不可少的一個工具了,當然也有人使用 Gradle 的。那麼 Maven 究竟是個啥東西呢?不就是一個依賴引入工具嗎?我相信很多人和我是一樣的感覺。但是一般而言,感覺的東西往往是不可靠的。我在網上收集一些資料,翻翻官網,重新整理了一下 Maven 的資料。
2 Maven 簡介維基百科上面說 Maven 是一個軟體專案管理和自動構建工具。單從字面意思來看,我是不知道這是想要表達什麼意思的。按照我的理解,Maven 其實就是一個開發工具,跟 IDEA 相輔相成。我們日常使用 IDEA 的編譯專案的時候,其實就是在使用 Maven,只不過這些操作都被強大的 IDEA 隱藏了,造成我們在使用 IDEA,和 Maven 沒有聯絡的錯覺。
3 Maven 的命令說命令列之前,容我說手幾個專業的名詞。
名稱解釋groupId包名artifactId專案名稱
groupId 的 artifactId 被人們稱為座標,確實也是,一旦他們的值確定了,我們就可以根據他們的座標找到他們。
建立mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -Dartifac t Id=my-app
這樣maven就自動建立了一個帶有 hello world 的 Maven 專案。包名是 com.mycompany.app; 專案名是 my-app。看到這裡,我們就知道為什麼 Maven 是專案構建工具了。我個人覺得 Maven 跟大前端的 npm 工具有相似的地方。
編譯mvncompile該命令從字面意思流知道是編譯命令,他是不是編譯 test 資料夾裡面的原始碼的。執行該命令就會生成一個 target 檔案。資料夾裡面就是編譯後的內容。
清除mvnclean該命令主要是清除編譯後產生的 target 資料夾。
打包mvnpackage該命令會將專案預設打成 jar 包,當然我們就也可以打成 war 包。
安裝mvninstall該命令可以把專案打成 jar,放到本地倉庫。
4 倉庫要理解 Maven,倉庫概念是必不可少的。讓我(靈魂畫手)畫個圖。
專案需要的依賴都是從本地倉庫裡面拿到的,本地倉庫就是自己的電腦,我們引入的各種依賴都放在本地倉庫裡面,一般依賴有問題的話,就是本地倉庫的依賴沒有。我們可以先把本地的對應的依賴刪除,在試試,或許就可以了。 從中,我們可以看到自建倉庫,也就是我們說的私服,可以存放一些我們開發的基礎包,從自建倉庫引入依賴就比較快的,當然如果自建倉庫裡面沒有我們需要的依賴,自建倉庫就會發出請求,請求遠端的中央倉庫,中央倉庫沒有那就真的沒有了。
5 POM現在是我們的重要任務出場了--POM. Maven 專案都會有一個 pom.xml 檔案。
這是一個最簡單的 pom 檔案。這個 pom 檔案應該我們很熟悉了,引入依賴就是從這裡引的。沒什麼好說的,所以說些其他的。
包型別// war<packaging>jar</packaging>
該標籤決定專案是 jar 包或者 war 包。一般來說,SpringBoot 專案會打成 war 包,然後放進 tomcat 執行。當然也可以 jar 包執行,畢竟 SpringBoot 內建了tomcat ,強的一批。
加進來<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources></build>
如果我們把一下檔案,例如 xml 字尾的 mapper 檔案放在 resources 裡面,編譯的時候會發現他們沒有編譯進去,是因為 <filtering> 標籤預設是 false,我們需要 true。
+- pom.xml+- my-app| +- pom.xml| +- src| +- main| +- java+- my-webapp| +- pom.xml| +- src| +- main| +- webapp
在頂層 pom.xml 需要新增 <modules> 標籤,如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>app</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>my-app</module> <module>my-webapp</module> </modules></project>
然後選一個做老大(webapp),在他的 pom 檔案里加入 my-app 的依賴
<dependencies> <dependency> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> </dependency> ...</dependencies>
然後再這兩個專案(webapp、my-app)的 pom 檔案裡面加入頂層的 <parent> 標籤
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>com.mycompany.app</groupId> <artifactId>app</artifactId> <version>1.0-SNAPSHOT</version> </parent> ...
最後執行 mvn verify 命令,就會在老大專案(webapp)的 target 資料夾裡生成 war 包。