Maven如何構(gòu)建項(xiàng)目

Maven是一個(gè)項(xiàng)目管理的綜合工具。使用 Maven 給我們帶來(lái)的最直接的好處,就是統(tǒng)一管理了jar 包及jar包之間依賴維護(hù),為我們省去了到各個(gè)網(wǎng)站去下載所需的jar包。本篇文章主要講講如何用Maven去構(gòu)建項(xiàng)目。

一、命令行構(gòu)建maven項(xiàng)目

  1. 打開(kāi)命令控制臺(tái),輸入命令mvn archetype:generate
  2. 選擇需要?jiǎng)?chuàng)建的模板,默認(rèn)7(普通java項(xiàng)目),10(javaweb項(xiàng)目)


  3. 輸入groupId,artifactId,version三要素及package


  4. 回車確認(rèn)后,創(chuàng)建完畢
    當(dāng)然也可以一次性命令創(chuàng)建項(xiàng)目
  • 創(chuàng)建java項(xiàng)目
mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} 
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  • 創(chuàng)建簡(jiǎn)單web項(xiàng)目
mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} 
-DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

二、Eclipse上構(gòu)建maven項(xiàng)目

一般較新版本的Eclipse都會(huì)帶有Maven插件,如何沒(méi)有可點(diǎn)擊Help -> Eclipse Marketplace,搜索maven關(guān)鍵字,安裝如下插件


  1. Maven環(huán)境配置:點(diǎn)擊Window -> Preferences->Maven


  2. New 菜單 Other.. -> Maven -> Maven Project
  3. 選擇Create a simple project及Use default Workspace location


  4. 添加項(xiàng)目信息,Finish完成。


三、IDEA上構(gòu)建maven項(xiàng)目

與在eclipse上類似,首先配置好本地的Maven,我這邊直接放圖了。




四、pom.xml配置文件詳解

以下列出了一些比較常用標(biāo)簽及說(shuō)明

<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">
 
    <!-- 模型版本。maven2.0必須是這樣寫(xiě),現(xiàn)在是maven2唯一支持的版本 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 公司或者組織的唯一標(biāo)志 -->
    <groupId>com.test</groupId>
    <!-- 項(xiàng)目的唯一ID,一個(gè)groupId下面可能多個(gè)項(xiàng)目-->
    <artifactId>testProject</artifactId>
    <!-- 項(xiàng)目的版本號(hào) -->
    <version>1.0.0-SNAPSHOT</version>
    <!-- 打包類型,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默認(rèn)為jar -->
    <packaging>jar</packaging>
       <!--項(xiàng)目一些信息,如項(xiàng)目名,描述,項(xiàng)目地址-->
        <name>testProject</name>
    <description>一個(gè)測(cè)試項(xiàng)目</description>
        <url>http://www.test.com/ </url>
    <!--父pom配置,子pom可繼承父pom的groupId,version -->
     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
                <!--設(shè)空值將始終從倉(cāng)庫(kù)中獲取;
                    查找順序:relativePath元素中的地址–本地倉(cāng)庫(kù)–遠(yuǎn)程倉(cāng)庫(kù)
                  -->
        <relativePath />
    </parent>
  <!--父pom中,包含的子模塊配置-->
  <modules><module>子模塊</module></modules>
<!--項(xiàng)目開(kāi)發(fā)者列表 -->  
 <developers>
    <!--項(xiàng)目開(kāi)發(fā)者的信息,列舉了主要一些標(biāo)簽 -->
    <developer>
        <!--項(xiàng)目開(kāi)發(fā)者名稱-->
        <name> xxxxxx</name>
        <!--項(xiàng)目開(kāi)發(fā)者email -->
        <email> xxxxxx@163.com</email>
        <!--項(xiàng)目開(kāi)發(fā)者URL -->
        <url ></url>
        <!--項(xiàng)目開(kāi)發(fā)者所屬機(jī)構(gòu) -->
        <organization> </organization>
    </developer>
 </developers>
<!--列出項(xiàng)目協(xié)議-->
<licenses>
    <license>
        <!--license名稱 -->
        <name>MIT</name>
        <!--官方的license正文頁(yè)面的URL -->
        <url></url>
        <!--關(guān)于license的補(bǔ)充信息 -->
        <comments> </comments>
    </license>
</licenses>
        <!-- 為pom定義一些常量,在pom中的其它地方可以直接引用 -->
    <properties>
        <file.encoding>UTF-8</file.encoding>
        <java.version>1.8</java.version>
        <commons.io.version>2.5</commons.io.version>
    </properties>
     <!--dependencyManagement
          父pom可以用來(lái)統(tǒng)一管理子模塊的依賴jar包;
          子pom可以用來(lái)引入父pom
      -->
    <dependencyManagement>
          <dependencies>
            ........
            <!--子pom通過(guò)非繼承的方式來(lái)引入pom,可以多個(gè);而parent的方式只能一個(gè)-->
            <dependency>  
              <groupId>com.test</groupId>  
              <artifactid>project_parent1</artifactId>  
              <version>1.0.0</version>  
              <type>pom</type>  
              <scope>import</scope>  
            </dependency> 
          </dependencies>
    </dependencyManagement>
        
    <!-- 定義項(xiàng)目的jar依賴關(guān)系 -->
    <dependencies>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version></version>
                        <!--范圍選擇,默認(rèn)compile:編譯,運(yùn)行,測(cè)試 有效
                              provided:編譯,測(cè)試 有效,不含在打包中
                              test:測(cè)試 有效
                              runtime:運(yùn)行,測(cè)試 有效
                              system:倉(cāng)庫(kù)之外的類庫(kù);編譯,測(cè)試 有效
                          -->
            <scope>compile</scope>
                        <systemPath>配合 scope=system時(shí)使用</systemPath>
            <!-- 設(shè)置依賴是否可選,默認(rèn)為false,  
                          如果為true時(shí),其它項(xiàng)目依賴該項(xiàng)目時(shí),需要 quartz時(shí),需寫(xiě)明    
                         dependency依賴-->
            <optional>false</optional>
 
            <!-- 排除依賴關(guān)系。禁止c3p0導(dǎo)入-->
            <exclusions>
                <exclusion>
                    <groupId>com.mchange</groupId>
                    <artifactId>c3p0</artifactId>
                </exclusion>
            </exclusions>
 
        </dependency>
    </dependencies>
       <!--構(gòu)建配置-->
        <build>
    <!-- 產(chǎn)生的構(gòu)件的文件名,默認(rèn)值是${project.artifactId}-${project.version}。 -->
         <finalName>${project.artifactId}</finalName>
    <!-- 構(gòu)建產(chǎn)生的所有文件存放的目錄,默認(rèn)為${basedir}/target,即項(xiàng)目根目錄下的target -->
        <directory>${basedir}/target</directory>
        <!--插件列表-->
            <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                                <version>..</version>
                                <executions>
                                    <!--插件與maven生命周期階段綁定配置-->
                                    <execution>
                                      <id>att-sources</id>
                                      <!--階段名,如:compile,package等-->
                                      <phase>package</phase>
                                      <!--插件需要執(zhí)行的目標(biāo)-->
                                      <goals>
                                          <goal></goal>
                                      </goals>
                                  </execution>
                                </executions>
                                <!--插件參數(shù)配置-->
                                 <configuration>
                                 </configuration>
                                <!--項(xiàng)目引入插件所需要的額外依賴 -->
                    <dependencies>
                    <dependency>...</dependency>
                    </dependencies>
            </plugin>
       </plugins>
        </build>
        <!--遠(yuǎn)程庫(kù)配置,可能需要引入一些特殊jar-->
    <repositories>
        <repository>
            <id>public</id>
            <name>aliyun nexus</name>
                        <!--遠(yuǎn)程庫(kù)地址-->
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                        <!--開(kāi)啟發(fā)布版本的下載-->
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
    <!-- 插件遠(yuǎn)程庫(kù) -->
    <pluginRepositories>
        <pluginRepository>
            <id>public</id>
            <name>aliyun nexus</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <!--開(kāi)啟發(fā)布版本的下載-->
                        <releases>
                <enabled>true</enabled>
            </releases>
                        <!--關(guān)閉快照的下載-->
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</project>

依賴范圍

scope 編譯 測(cè)試 運(yùn)行
compile Y Y Y
test Y
provided Y Y
runtime Y Y
system Y Y

依賴傳遞性
比如有a,b,c三個(gè)jar包或項(xiàng)目,a依賴b,b依賴c,而c對(duì)于a來(lái)說(shuō)是傳遞性依賴。傳遞依賴受依賴范圍限制。下表中第一列代表a對(duì)b的依賴,第一行代表b對(duì)c的依賴。則a對(duì)于c的依賴范圍如下表所示,為空則不依賴。

compile test provided runtime
compile compile runtime
test test test
provided provided provided provided
runtime runtime runtime

五、Maven打包命令

主要有三個(gè)打包命令mvn package、mvn install、mvn deploy。當(dāng)然一般打包之前都會(huì)先清理一下。

  • mvn clean package:完成了清理、項(xiàng)目編譯、單元測(cè)試、打包功能。
  • mvn clean install:完成了清理、項(xiàng)目編譯、單元測(cè)試、打包及布署到本地maven倉(cāng)庫(kù)功能。
  • mvn clean deploy:完成了清理、項(xiàng)目編譯、單元測(cè)試、打包及布署到本地maven倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)功能。

參考資料
pom.xml配置文件詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容