歡迎換看Java開發之上帝之眼系列教程,如果您正在為Java後端龐大的體系所困擾,如果您正在為各種繁出不窮的技術和各種架構所迷茫,那麼本系列文章将帶您窺探Java龐大的體系。本系列教程希望您能站在上帝的角度去觀察(了解)Java體系。使Java的各種後端技術在你心中子產品化;讓你在工作中能将Java各個技術了然于心;能夠即插即用。本章我們來一起了解項目建構工具Maven。
歡迎檢視Java開發之上帝之眼系列教程,如果您正在為Java後端龐大的體系所困擾,如果您正在為各種繁出不窮的技術和各種架構所迷茫,那麼本系列文章将帶您窺探Java龐大的體系。本系列教程希望您能站在上帝的角度去觀察(了解)Java體系。使Java的各種後端技術在你心中子產品化;讓你在工作中能将Java各個技術了然于心;能夠即插即用。本章我們來一起了解項目建構工具Maven。
什麼是項目建構工具?
在進行程式設計操作的時候,我們常常會遇到很多與程式設計無關的項目管理工作,如下載下傳依賴、編譯源碼、單元測試、項目部署等操作。一般的,小型項目我們可以手動實作這些操作,然而大型項目這些工作則相對複雜。建構工具是幫助我們實作一系列項目管理、測試和部署操作的工具。
Java項目建構工具有哪些?
對于Java項目的建構工具;傳統建構工具有Ant,主流建構工具:Maven,新興建構工具:Gradle
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0cTO1EjM0ITMx0yN5gjN1ETM1ETNykDM4EDMy0CM2ADOxITMvwVOwgTMwIzLcBjNwgTMyEzLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
Maven建構項目的生命周期有哪些?
- validate:驗證項目以及相關資訊是否正确
- compile:編譯源代碼和相關資源檔案
- test:對測試代碼進行測試
- package:根據不同的項目類型進行打包
- verigy:驗證打包的正确性
- install:将打包好的包安裝到本地
- deploy:将打包好的包釋出到遠端
Maven的主要功能?
- 依賴管理
- 規範目錄結構
- 完整的項目建構階段
- 支援多種插件
來了解一下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/
<!--管理依賴-->
<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>不生效!
Maven其他功能:規範目錄結構
在一個maven項目中,一個标準的web項目結構如下
項目的結構是支援自定義的,但是不要這麼做,别人看到自定義的項目結構會産生歧義,建構标準的目錄結構有利于項目建構的标準化。如果需要自定義項目結構,可以在pom中這樣配置。
<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标簽中增加下面代碼
<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指令大全)
https://www.cnblogs.com/wkrbky/p/6352188.html
Java開發之上帝之眼系列教程其他文章
- Java開發之上帝之眼系列教程前言和章節目錄彙總
勘誤&感謝
本系列文章資料來源很多出自于網際網路和在下本身的見解,受限于個人技術能力水準和其他相關知識的限制,相關見解錯誤或者資料引用錯誤請各位幫助留言校正!引用資料多來自于網際網路,在下在引用前會遵循各位前輩或者部落客的引用說明表示感謝,但網際網路資料多是轉發再轉發或存在遺漏請原作者内信聯系指正。
雜家不如專家,精益求精