---
# System prepended metadata

title: Apache Maven
tags: [Java]

---

[toc]

## Apache Maven

(簡單使用介紹)
(官網: https://maven.apache.org/)

Maven是一個專案管理/構件工具
                                         
官方解釋:
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM).
                                         
### How to install (Windows):
前往 https://maven.apache.org/download.cgi
下載 Binary archive, 並unarchive.

設定Environment Variable:
User variables: MAVEN_HOME, M2_HOME(value設為bin資料夾的path)
System variables: Path (新增bin資料夾的path)

### 專案架構:
```
/Project
    /src ->程式碼
        /main 
            /java      ->java程式碼
            /resources ->資源,會被打包進jar, 如圖片/config檔等等
        /test ->測試目錄
    /target ->構建結果
    pom.xml -> information
```

### 專案識別:
groupId:artifactId:version

### pom.xml
    
#### XML格式
```xml
<!-- 註解 -->

<attribute>value</attribute>

<!--屬性存取-->
<attr2>${attribute}</attr2>
```
pom.xml為此專案的設定檔

#### 依賴
一個專案A可以依賴另一個專案B
執行專案A的時候可以包含專案B的程式
但是A.jar並不會打包B.jar
需要用一些插件來達成, 像是"Maven Shade Plugin"
    
如果有用到依賴,依賴專案的.jar會存放在"local maven repo"裡
```C:\\Users\user\.m2\repository\```
```~/.m2/repository/```
如果沒有, Maven會試圖從 repo1.maven.org/maven2/ 下載。

pom.xml的常見內容:
```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>

  <!-- the information of this project -->
  <groupId>groupId</groupId>
  <artifactId>artifactId</artifactId>
  <version>1.0-SNAPSHOT</version>

  <!-- project properties -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
  </properties>

  <!-- dependencies -->
  <dependencies>
    <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.11.0</version>
    </dependency>
  </dependencies>

  <!-- build settings -->
  <build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <!-- your build plugins 
        常用的像是maven compile/maven shade
        -->
    </plugins>
  </build>
</project>
```
### 指令(mvn)
常用:
```
mvn -version //check the maven version
mvn compile  //compile the source
mvn clean    //remove target directory
mvn install  //install the project to local maven repo
```