《maven實戰》讀書筆記3——maven使用入門
說明
由於我目前所做的項目皆是java web項目,因此整個係統學習的過程也就以java web為基礎。
maven項目結構
根據maven約定,一個比較標準的maven java web項目,結合eclipse通常可以看到結構如下:
src/main/java java主要代碼存放目錄 src/main/resources java配置文件存放目錄 src/test/java java測試代碼存放目錄 JRE System Library jre中的一些jar包映射 Maven Dependencies 根據pom.xml配置的依賴而導入的jar包映射 src/main/webapp web相關的文件,如html等 src/test 這個目錄暫時還沒用過 target maven項目輸出目錄,例如生成多的war包 pom.xml maven項目最重要的一個文件
pom.xml文件說明
pom.xml文件格式
pom.xml文件是maven項目的靈魂所在,一個標準的pom.xml文件格式大概如下:
<?xml version="1.0" encoding="UTF-8"?\> <project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"\> <modelVersion>4.0.0</modelVersion> <groupId>com.cmupay</groupId> <artifactId>cmupay-coresys</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>cmupay-coresys</name> <description>Demo project for Spring Boot</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
pom.xml節點說明
這個文件中,首先是xml格式說明,接下來是pom.xml文件中的父節點<project>
project
project是pom.xml文件中的父節點(或者說根元素),節點中有一些屬性配置,這些屬性可以說不是必須的,但是一般都會寫上,有了這些配置可以使一些工具更容易解析和編輯pom.xml文件,例如使用eclipse編輯。
modelVersion
<modelVersion>
指定了pom文件模板的版本,根據我的理解,和<project>
中的屬性涉及到的版本應該一致。需要注意的是,對於maven2和maven3來說,隻能是4.0.0。
groupId、artifactId及version
這三個元素可以說是pom.xml中最重要的元素,他們三個決定了當前maven項目的坐標唯一性,貌似可以理解成三維坐標的x、y、z三個坐標,然後決定了一個確定的點。
其中<groupId>
指定當前項目所屬的組,一般可能就填寫公司的網址,由於網址的唯一性,這個就不會重複,相當於三維坐標中從x軸定位;<artifactId>
指定了當前項目在當前組中的唯一ID,通常都是填寫的項目名,同一個公司可能有多個項目,但不同項目有不同的編號和名稱,相當於在三維坐標確定的x坐標位置再確定y坐標;
實際開發過程中,經常是以迭代的形式進行,因此不同的項目就會有很多個不同的版本,單獨用項目名也不能確定項目的唯一性,通過<version>
指定項目版本,再結合前邊兩項,就能保證項目坐標的唯一性,這樣在maven不同項目間的依賴上就能通過配置準確的獲取配置的依賴項。
packaging
這裏主要是指定項目打包時是生成什麼形式的壓縮包,例如通常web項目會填寫“war”。
name和description
因為項目名稱有時候可能並不能很好的表達該項目做什麼,因此name元素可以用來聲明一個更加友好的名稱,同樣的description是更加詳細的項目描述。
properties
maven項目基礎屬性配置,通常會配置項目構建的字符集編碼,輸出,也就是打包文件的字符集以及jdk版本等。
dependencies
這裏主要是項目依賴的配置,也就是通常所說的jar包配置,一個<dependencies>
裏邊可以有很多個<dependency>
元素,而<dependency>
裏邊就是實際依賴包的配置,配置的原理實際上就是上邊描述過的項目坐標,通過<groupId>
、<artifactId>
和<version>
確定唯一的jar包。
當有了上述三個配置後,maven就會自動下載相應的jar包,至於具體是去哪裏下載,就要涉及到一些其他的配置了,後續熟悉過程中再進一步說明。<dependency>
裏邊還有一個屬性是<scope>
,指的是作用範圍,如果是“test”,說明隻在測試的時候生效,如果沒有配置這個值,默認是"compile",表示對主代碼和測試代碼都生效。
build
build裏邊通常是對maven構建項目過程中需要用到的maven插件進行配置,例如上述例子中指定編譯插件版本。
在實際使用過程中,我發現當配置了<properties>
中的jdk版本後,似乎不需要再在這裏配置maven編譯插件版本也可以,具體細節可能還需要在後續熟悉的過程中進一步了解。
最後更新:2017-11-07 18:03:56