在maven
的世界里词爬,一切都從pom
文件開始......
下面是一個入門級helloworld
項目的 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
三個元素定義了項目的基本坐標,在maven
中术陶,任何jar,pom,war
都是以這些基本坐標元素來區(qū)分的凑懂。
無規(guī)矩不成方圓,在pom
文件中定義的元素都有各自的規(guī)范梧宫。
groupId定義了項目所屬組接谨,通常與公司或組織有關,格式形如公司或組織網(wǎng)址反序.項目名(假設域名為www.zheng.com
建立的一個myapp
項目,最后命名為com.zheng.myapp
)
artifactId項目模塊名塘匣,在所屬組中唯一脓豪,用于區(qū)分不同的模塊,比如上面的hello-world
忌卤,格式形如項目名-模塊名
version定義了當前項目的版本扫夜,在maven
中定義了幾個版本符號SNAPSHOT
(開發(fā)版),alpha
,(內(nèi)部測試版),beta
(外部測試),release
(發(fā)布版),根據(jù)項目不同情況填寫不同的版本標識
name為當前項目模塊聲明了一個友好的名稱驰徊,雖然不是必須的笤闯,但是建議為每一個項目模塊都定義一個友好的名稱,方便信息交流
maven與java代碼之間是相互解耦互相不影響的
maven項目結構
project-name
src
main
java
resources
test
java
resources
其中src/main/
里面的代碼被稱之為主代碼棍厂,在打包時會打包到最終的構建中颗味,src/test
下面的代碼為測試代碼,打包時將被忽略
代碼包名定義規(guī)范
groupId/artifactId
相吻合牺弹,項目中java類包都應該基于項目的groupId
和artifactId
,比如上面的hello-world模塊主代碼包為:src/main/java/com/zheng/mvnstudy/helloworld
maven
的功能非常強大浦马,它還可以配置各種插件以滿足項目需要时呀,下面的插件將項目編譯環(huán)境設置成了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>
當maven
開始構建項目時,它會自動完成對項目主資源處理晶默、主代碼編譯谨娜、測試資源處理、測試代碼編譯等工作
maven生成可運行的jar
java
編譯環(huán)境可以直接對包含main
方法的類打包成jar包并運行磺陡,在maven
中也可以做到這一點趴梢,但要實現(xiàn)這個功能,需要借助額外的插件maven-shade-plugin
提示:maven
常規(guī)打包生成的jar
包是無法直接運行的仅政,因為帶有main
方法的類信息不會直接添加到MANIFEST
文件中(打開jar
文件中的META-INF/MANIFEST.MF
將無法看到Main-Class
一項參數(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
生成項目骨架
maven3
提供了一個archetype
工具用于幫助用戶自動生成maven項目結構垢油,通過CMD
進入到項目目錄中直接運行mvn archetype:generate
下面是運行命令之后的結果
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] ------------------------------------------------------------------------
最后會在項目目錄下生成項目的基本結構
以上是我學習《maven實戰(zhàn)》一書前三章所做的筆記要點盆驹,寫在簡書上主要是方便自己查閱圆丹,當然如果我的筆記能幫到大家那我也是非常開心的