Java項目工程化之項目構建工具Maven

歡迎查看Java開發之上帝之眼系列教程,若是您正在爲Java後端龐大的體系所困擾,若是您正在爲各類繁出不窮的技術和各類框架所迷茫,那麼本系列文章將帶您窺探Java龐大的體系。本系列教程但願您能站在上帝的角度去觀察(瞭解)Java體系。使Java的各類後端技術在你心中模塊化;讓你在工做中能將Java各個技術瞭然於心;可以即插即用。本章咱們來一塊兒瞭解項目構建工具Maven。html

 

什麼是項目構建工具?

在進行編程操做的時候,咱們經常會遇到不少與編程無關的項目管理工做,以下載依賴、編譯源碼、單元測試、項目部署等操做。通常的,小型項目咱們能夠手動實現這些操做,然而大型項目這些工做則相對複雜。構建工具是幫助咱們實現一系列項目管理、測試和部署操做的工具。java

 

Java項目構建工具備哪些?git

對於Java項目的構建工具;傳統構建工具備Ant,主流構建工具:Maven,新興構建工具:Gradle

 

 

 

 

Maven構建項目的生命週期有哪些?

  • validate:驗證項目以及相關信息是否正確
  • compile:編譯源代碼和相關資源文件
  • test:對測試代碼進行測試
  • package:根據不一樣的項目類型進行打包
  • verigy:驗證打包的正確性
  • install:將打包好的包安裝到本地
  • deploy:將打包好的包發佈到遠程

Maven的主要功能?

  1. 依賴管理
  2. 規範目錄結構
  3. 完整的項目構建階段
  4. 支持多種插件

來了解一下Maven配置文件pom.xml

  Maven全部配置都在pom.xml文件中配置,如定義項目類型,名字,管理依賴,定製插件等,以下示例;
<?xml version="1.0" encoding="UTF-8"?>
<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.jimisun</groupId>
    <artifactId>learnmaven</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--項目打包方式-->
    <packaging>war</packaging>

    <!--定義全局屬性-->
    <properties>
        <spring.version>4.1.1.RELEASE</spring.version>
    </properties>

    <!--管理依賴-->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

    <!--管理配置或定製插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

 Maven強大功能:管理依賴

Maven經過座標groupId:artifactId:version來標識一個惟一的二進制版本,一個Maven工程若是添加某個依賴只須要查找這個依賴的座標便可,開發中經常使用查詢依賴網址http://mvnrepository.com/github

    <!--管理依賴-->
    <dependencies>
        <!--添加Spring-Context的依賴-->
        <dependency>
            <!--標識組織-->
            <groupId>org.springframework</groupId>
            <!--標識項目-->
            <artifactId>spring-context</artifactId>
            <!--標誌版本-->
            <version>4.1.1.RELEASE</version>
        </dependency>
    </dependencies>

 PS:經過parent能夠實現pom文件繼承父類完成統一配置管理,能夠使用<dependencyManagement></dependencyManagement>和<pluginManagement></pluginManagement>統一依賴和插件,不一樣於<dependencies>和<plugins>的是,若是子類pom沒有聲明<dependency>和<plugin>不生效!web

Maven其餘功能:規範目錄結構

在一個maven項目中,一個標準的web項目結構以下spring

項目的結構是支持自定義的,可是不要這麼作,別人看到自定義的項目結構會產生歧義,構建標準的目錄結構有利於項目構建的標準化。若是須要自定義項目結構,能夠在pom中這樣配置。apache

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <warSourceDirectory>WebContent/</warSourceDirectory>
                </configuration>
            </plugin>
        </plugins>
        <sourceDirectory>src</sourceDirectory>
        <resources>
            <resource>
                <directory>resources</directory>
            </resource>
        </resources>
        <testSourceDirectory>test/java</testSourceDirectory>
        <testResources>
            <testResource>
                <directory>test/resources</directory>
            </testResource>
        </testResources>
        <directory>build</directory>
</build>
java代碼目錄移動到./src
配置文件目錄移動到resources
測試代碼目錄移動到./test/java
測試配置文件移動到./test/resources
webapp根目錄移動到WebContent
編譯目錄改變成./build

 Maven擴展功能:支持多插件

  • maven-compiler-plugin:源碼編譯插件編程

  • maven-source-plugin:源碼發佈插件,綁定compile階段 執行jar goal,將源碼以jar包形式發佈出去
  • maven-javadoc-plugin:javadoc插件,將源碼的javadoc發佈出去
  • maven-tomcat7-plugin:直接使用tomcat運行項目,mvn tomcat7:run
  • maven-shade-plugin:經常使用打包插件,綁定在package階段,執行shade goal,將源碼和依賴在一塊兒獨立運行
  • maven-assesmbly-plugin:和shade類似,打包插件,支持tar,zip,gz
  • maven-gpg-plugin:jar包的簽名插件,針對本身發佈的jar包簽名

Maven其餘經常使用配置

配置本地Maven倉庫:在maven的conf目錄的settings.xml的settings標籤中增長下面一行後端

<localRepository>E:\maven\mavenhome\repo(你的本地倉庫地址)</localRepository>

配置Maven鏡像遠程倉庫(阿里):在maven的conf目錄的settings.xml的mirrors標籤中增長下面代碼tomcat

  <mirror> 
    <id>alimaven</id> 
    <name>aliyun maven</name> 
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
    <mirrorOf>central</mirrorOf> 
  </mirror> 

根據不一樣環境打包不一樣配置文件到項目(有示例代碼點擊此處查看完整示例代碼

<profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <resource.dir>resource/dev</resource.dir>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <resource.dir>resource/prod</resource.dir>
            </properties>
        </profile>
    </profiles>

   <build>
        <resources>
            <resource>
                <directory>${resource.dir}</directory>
            </resource>
            <resource>
                <directory>resources</directory>
            </resource>
        </resources>
    </build>
如此,就分爲dev和prod兩個環境,對應每一種環境其資源文件路徑不同,在使用MVM時,使用-P指定profile便可生效

 

 

Maven命令大全(後面將會整理出比較細系統和全面的Maven命令大全)

http://www.javashuo.com/article/p-djafkiuy-y.html

 

 Java開發之上帝之眼系列教程其餘文章

 

勘誤&感謝

  本系列文章資料來源不少出自於互聯網和在下自己的看法,受限於我的技術能力水平和其餘相關知識的限制,相關看法錯誤或者資料引用錯誤請各位幫助留言校訂!引用資料多來自於互聯網,在下在引用前會遵循各位前輩或者博主的引用說明表示感謝,但互聯網資料可能是轉發再轉發或存在遺漏請原做者內信聯繫指正。

相關文章
相關標籤/搜索