Apache Maven從入門到升天

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

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 工具有相似的地方。

編譯

mvn compile

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

清除

mvn clean

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

打包

mvn package

該命令會將項目默認打成 jar 包,當然我們就也可以打成 war 包。

安裝

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
  • http://www.nxrnyq.tw/luotaoyeah/p/3791966.html

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

公眾號.jpg

posted @ 2019-12-13 00:44  布爾bl  閱讀(...)  評論(...編輯  收藏
四川金7乐历史开奖号码查询