Apache Maven從入門到昇天

喜歡就點個讚唄!
GitHub項目JavaHouse同步收錄html

1 引入

在平常 Java 開發中,Maven 應該是必不可少的一個工具了,固然也有人使用 Gradle 的。那麼 Maven 到底是個啥東西呢?不就是一個依賴引入工具嗎?我相信不少人和我是同樣的感受。可是通常而言,感受的東西每每是不可靠的。我在網上收集一些資料,翻翻官網,從新整理了一下 Maven 的資料。前端

2 Maven 簡介

維基百科上面說 Maven 是一個軟件項目管理和自動構建工具。單從字面意思來看,我是不知道這是想要表達什麼意思的。按照個人理解,Maven 其實就是一個開發工具,跟 IDEA 相輔相成。咱們平常使用 IDEA 的編譯項目的時候,其實就是在使用 Maven,只不過這些操做都被強大的 IDEA 隱藏了,形成咱們在使用 IDEA,和 Maven 沒有聯繫的錯覺。java

3 Maven 的命令

說命令行以前,容我說手幾個專業的名詞。 git

名稱 解釋
groupId 包名
artifactId 項目名稱

groupId 的 artifactId 被人們稱爲座標,確實也是,一旦他們的值肯定了,咱們就能夠根據他們的座標找到他們。github

建立

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 工具備類似的地方。web

編譯

mvn compile
複製代碼

該命令從字面意思流知道是編譯命令,他是否是編譯 test 文件夾裏面的源碼的。執行該命令就會生成一個 target 文件。文件夾裏面就是編譯後的內容。apache

清除

mvn clean
複製代碼

該命令主要是清除編譯後產生的 target 文件夾。npm

打包

mvn package
複製代碼

該命令會將項目默認打成 jar 包,固然咱們就也能夠打成 war 包。tomcat

安裝

mvn install
複製代碼

該命令能夠把項目打成 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 裏面,編譯的時候會發現他們沒有編譯進去,是由於 標籤默認是 false,咱們須要 true。

去掉他

<exclusions>
    <exclusion>
      <groupId>sample.ProjectE</groupId> <!-- Exclude Project-E from Project-B -->
      <artifactId>Project-E</artifactId>
    </exclusion>
</exclusions>
複製代碼

部署到遠程

<distributionManagement>
    <repository>
      <id>mycompany-repository</id>
      <name>MyCompany Repository</name>
      <url>scp://repository.mycompany.com/repository/maven2</url>
    </repository>
</distributionManagement>
複製代碼

當咱們造好輪子以後,想部署到遠程中央倉庫,就添加上面標籤。同時在 setting.xml(Maven 安裝的目錄下)添加如下

<servers>
    <server>
      <id>mycompany-repository</id>
      <username>jvanzyl</username>
      <!-- Default value is ~/.ssh/id_dsa -->
      <privateKey>/path/to/identity</privateKey> (default is ~/.ssh/id_dsa)
      <passphrase>my_key_passphrase</passphrase>
    </server>
 </servers>
複製代碼

多個模塊

若是咱們想一次建造幾個maven項目,也是沒有問題的。好比有兩個模塊(my-app、my-webapp),目錄以下

+- pom.xml
+- my-app
| +- pom.xml
| +- src
|   +- main
|     +- java
+- my-webapp
| +- pom.xml
| +- src
|   +- main
|     +- webapp
複製代碼

在頂層 pom.xml 須要添加 標籤,以下

<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 文件裏面加入頂層的 標籤

<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 包。

參考

  • https://zh.wikipedia.org/wiki/Apache_Maven
  • https://maven.apache.org/
  • https://maven.apache.org/guides/getting-started/index.html
  • https://maven.apache.org/guides/mini/guide-configuring-maven.html
  • https://www.cnblogs.com/luotaoyeah/p/3791966.html

關注微信公衆號,隨時移動端閱讀

公衆號.jpg
公衆號.jpg
相關文章
相關標籤/搜索