一、maven入門

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

TIM圖片20170723214603.gif

下面是一個(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)目的groupIdartifactId,比如上面的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)

TIM截圖20170721003653.png

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Apache Maven,是一個(gè)軟件(特別是Java軟件)項(xiàng)目管理及自動構(gòu)建工具,由Apache軟件基金會所提供。...
    cqzhangjian閱讀 1,630評論 0 51
  • 24.maven自動化部署 (待測試)# 在項(xiàng)目開發(fā)中,通常是部署過程包含以下步驟 檢入代碼在建項(xiàng)目全部進(jìn)入SVN...
    明_27bf閱讀 629評論 0 0
  • 1. 什么是archeType 我們在創(chuàng)建maven項(xiàng)目的時(shí)候,你會發(fā)現(xiàn)有這么多的apache提供的模板。 或者使...
    諸葛垣纓閱讀 777評論 0 0
  • Maven - 自定義archetype 前言 核心內(nèi)容 單Module 多Module 前言 要自定義arche...
    齊晉閱讀 5,754評論 1 5
  • 原文鏈接:http://www.dropwizard.io/1.2.0/docs/getting-started....
    Lance_Xu閱讀 1,153評論 0 0

友情鏈接更多精彩內(nèi)容