在maven的世界里,一切都從pom文件開始......

下面是一個(gè)入門級helloworld項(xiàng)目的 pom配置文件:
<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.zheng.mvnstudy</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name> Maven Hello World Project </name>
</project>
pom文件中的groupId、artifactId、version三個(gè)元素定義了項(xiàng)目的基本坐標(biāo),在maven中,任何jar,pom,war都是以這些基本坐標(biāo)元素來區(qū)分的。
無規(guī)矩不成方圓,在pom文件中定義的元素都有各自的規(guī)范。
groupId定義了項(xiàng)目所屬組,通常與公司或組織有關(guān),格式形如公司或組織網(wǎng)址反序.項(xiàng)目名(假設(shè)域名為www.zheng.com建立的一個(gè)myapp項(xiàng)目,最后命名為com.zheng.myapp)
artifactId項(xiàng)目模塊名,在所屬組中唯一,用于區(qū)分不同的模塊,比如上面的hello-world,格式形如項(xiàng)目名-模塊名
version定義了當(dāng)前項(xiàng)目的版本,在maven中定義了幾個(gè)版本符號SNAPSHOT(開發(fā)版),alpha,(內(nèi)部測試版),beta(外部測試),release(發(fā)布版),根據(jù)項(xiàng)目不同情況填寫不同的版本標(biāo)識
name為當(dāng)前項(xiàng)目模塊聲明了一個(gè)友好的名稱,雖然不是必須的,但是建議為每一個(gè)項(xiàng)目模塊都定義一個(gè)友好的名稱,方便信息交流
maven與java代碼之間是相互解耦互相不影響的
maven項(xiàng)目結(jié)構(gòu)
project-name
src
main
java
resources
test
java
resources
其中src/main/里面的代碼被稱之為主代碼,在打包時(shí)會打包到最終的構(gòu)建中,src/test下面的代碼為測試代碼,打包時(shí)將被忽略
代碼包名定義規(guī)范
groupId/artifactId相吻合,項(xiàng)目中java類包都應(yīng)該基于項(xiàng)目的groupId和artifactId,比如上面的hello-world模塊主代碼包為:src/main/java/com/zheng/mvnstudy/helloworld
maven的功能非常強(qiáng)大,它還可以配置各種插件以滿足項(xiàng)目需要,下面的插件將項(xiàng)目編譯環(huán)境設(shè)置成了jdk1.8
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
當(dāng)maven開始構(gòu)建項(xiàng)目時(shí),它會自動完成對項(xiàng)目主資源處理、主代碼編譯、測試資源處理、測試代碼編譯等工作
maven生成可運(yùn)行的jar
java編譯環(huán)境可以直接對包含main方法的類打包成jar包并運(yùn)行,在maven中也可以做到這一點(diǎn),但要實(shí)現(xiàn)這個(gè)功能,需要借助額外的插件maven-shade-plugin
提示:maven常規(guī)打包生成的jar包是無法直接運(yùn)行的,因?yàn)閹в?code>main方法的類信息不會直接添加到MANIFEST文件中(打開jar文件中的META-INF/MANIFEST.MF將無法看到Main-Class一項(xiàng)參數(shù))
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.zheng.helloworld.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
使用archetype生成項(xiàng)目骨架
maven3提供了一個(gè)archetype工具用于幫助用戶自動生成maven項(xiàng)目結(jié)構(gòu),通過CMD進(jìn)入到項(xiàng)目目錄中直接運(yùn)行mvn archetype:generate
下面是運(yùn)行命令之后的結(jié)果
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 984: Choose org.apache.maven.archetypes:maven-archetype-quickstart version: 1: 1.0-alpha-1 2: 1.0-alpha-2 3: 1.0-alpha-3 4: 1.0-alpha-4 5: 1.0 6: 1.1 Choose a number: 5: Define value for property 'groupId': : com.zheng.helloworld Define value for property 'artifactId': : hello-world-archetype Define value for property 'version': 1.0-SNAPSHOT: : Define value for property 'package': com.zheng.helloworld: : Confirm properties configuration: groupId: com.zheng.helloworld artifactId: hello-world-archetype version: 1.0-SNAPSHOT package: com.zheng.helloworld Y: : Y [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: basedir, Value: D:\workspace\maven-study [INFO] Parameter: package, Value: com.zheng.helloworld [INFO] Parameter: groupId, Value: com.zheng.helloworld [INFO] Parameter: artifactId, Value: hello-world-archetype [INFO] Parameter: packageName, Value: com.zheng.helloworld [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: D:\workspace\maven-study\hello-world-archetype [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 03:10 min [INFO] Finished at: 2017-06-17T23:07:00+08:00 [INFO] Final Memory: 15M/178M [INFO] ------------------------------------------------------------------------
最后會在項(xiàng)目目錄下生成項(xiàng)目的基本結(jié)構(gòu)

以上是我學(xué)習(xí)《maven實(shí)戰(zhàn)》一書前三章所做的筆記要點(diǎn),寫在簡書上主要是方便自己查閱,當(dāng)然如果我的筆記能幫到大家那我也是非常開心的