亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Maven實(shí)戰(zhàn)之Quick Start

Yi_Zhi_Yu / 522人閱讀

摘要:在之前,十個(gè)項(xiàng)目可能有十種構(gòu)建方式,但通過,所有項(xiàng)目的構(gòu)建命令都是簡(jiǎn)單一致的。有利于促進(jìn)項(xiàng)目團(tuán)隊(duì)的標(biāo)準(zhǔn)化。手工勞動(dòng)往往意味著低效,意味著容易出錯(cuò)。這在很大程度上消除了重復(fù)。默認(rèn)情況下,該文件夾下放置了本地倉(cāng)庫(kù)。學(xué)習(xí)實(shí)戰(zhàn)許曉斌著

Introduction

Maven是一個(gè)異常強(qiáng)大的構(gòu)建工具,能夠幫我們自動(dòng)化構(gòu)建過程,從清理、編譯、測(cè)試到生成報(bào)告,再到打包和部署。通過Maven,我們只需要輸入簡(jiǎn)單的命令(如mvn clean install),就會(huì)幫我們處理繁瑣的任務(wù)。Maven最大化的消除了構(gòu)建的重復(fù),抽象了構(gòu)建生命周期,并且為絕大部分的構(gòu)建任務(wù)提供了已實(shí)現(xiàn)的插件。比如說測(cè)試,我們只需要遵循Maven的約定編寫好測(cè)試用例,當(dāng)我們運(yùn)行構(gòu)建的時(shí)候,這些測(cè)試便會(huì)自動(dòng)運(yùn)行。除此之外,Maven能幫助我們標(biāo)準(zhǔn)化構(gòu)建過程。在Maven之前,十個(gè)項(xiàng)目可能有十種構(gòu)建方式,但通過Maven,所有項(xiàng)目的構(gòu)建命令都是簡(jiǎn)單一致的。有利于促進(jìn)項(xiàng)目團(tuán)隊(duì)的標(biāo)準(zhǔn)化。

Maven是筆者接觸的第一個(gè)脫離于IDE的命令行構(gòu)建工具,筆者之前一直是基于Visual Studio下進(jìn)行Windows驅(qū)動(dòng)開發(fā),并不是很能明白Builder與IDE之間的區(qū)別。依賴大量的手工操作。編譯、測(cè)試、代碼生成等工作都是相互獨(dú)立的,很難一鍵完成所有工作。手工勞動(dòng)往往意味著低效,意味著容易出錯(cuò)。很難在項(xiàng)目中統(tǒng)一所有的IDE配置,每個(gè)人都有自己的喜好。也正是由于這個(gè)原因,一個(gè)在機(jī)器A上可以成功運(yùn)行的任務(wù),到了機(jī)器B的IDE中可能就會(huì)失敗。

Make

Make將自己和操作系統(tǒng)綁定在一起了。也就是說,使用Make,就不能實(shí)現(xiàn)(至少很難)跨平臺(tái)的構(gòu)建,這對(duì)于Java來(lái)說是非常不友好的。此外,Makefile的語(yǔ)法也成問題,很多人抱怨Make構(gòu)建失敗的原因往往是一個(gè)難以發(fā)現(xiàn)的空格或Tab使用錯(cuò)誤。

Ant

和Make一樣,Ant也都是過程式的,開發(fā)者顯式地指定每一個(gè)目標(biāo),以及完成該目標(biāo)所需要執(zhí)行的任務(wù)。針對(duì)每一個(gè)項(xiàng)目,開發(fā)者都需要重新編寫這一過程,這里其實(shí)隱含著很大的重復(fù)。Maven是聲明式的,項(xiàng)目構(gòu)建過程和過程各個(gè)階段所需的工作都由插件實(shí)現(xiàn),并且大部分插件都是現(xiàn)成的,開發(fā)者只需要聲明項(xiàng)目的基本元素,Maven就執(zhí)行內(nèi)置的、完整的構(gòu)建過程。這在很大程度上消除了重復(fù)。

Ant是沒有依賴管理的,所以很長(zhǎng)一段時(shí)間Ant用戶都不得不手工管理依賴,這是一個(gè)令人頭疼的問題。幸運(yùn)的是,Ant用戶現(xiàn)在可以借助Ivy管理依賴。而對(duì)于Maven用戶來(lái)說,依賴管理是理所當(dāng)然的,Maven不僅內(nèi)置了依賴管理,更有一個(gè)可能擁有全世界最多Java開源軟件包的中央倉(cāng)庫(kù),Maven用戶無(wú)須進(jìn)行任何配置就可以直接享用。

Usage Installation

可從apache官方下載最新的Maven 壓縮包,解壓即可。然后設(shè)置下系統(tǒng)的環(huán)境變量。如下所示:

M2HOME:maven安裝目錄

Path:追加maven安裝目錄下的bin目錄

在用戶目錄下,我們可以發(fā)現(xiàn).m2文件夾。默認(rèn)情況下,該文件夾下放置了Maven本地倉(cāng)庫(kù).m2/repository。所有的Maven構(gòu)件(artifact)都被存儲(chǔ)到該倉(cāng)庫(kù)中,以方便重用。默認(rèn)情況下,~/.m2目錄下除了repository倉(cāng)庫(kù)之外就沒有其他目錄和文件了,不過大多數(shù)Maven用戶需要復(fù)制M2HOME/conf/settings.xml文件到~/.m2/settings.xml

Commands List

本節(jié)列舉出部分常用的Maven命令:

mvn -v 查看maven版本

mvn compile 編譯

mvn test 測(cè)試

mvn package 打包

mvn clean 刪除target

mvn install 安裝jar包到本地倉(cāng)庫(kù)中

創(chuàng)建一個(gè)新工程

mvn archetype:generate -DgroupId=co.hoteam -DartifactId=Zigbee -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Pom

就像Make的Makefile,Ant的build.xml一樣,Maven項(xiàng)目的核心是pom.xml。

首先創(chuàng)建一個(gè)名為hello-world的文件夾,打開該文件夾,新建一個(gè)名為pom.xml的文件,輸入其內(nèi)容如下:



4.0.0
com.juvenxu.mvnbook
hello-world
1.0-SNAPSHOT
Maven Hello World Project

代碼的第一行是XML頭,指定了該xml文檔的版本和編碼方式。緊接著是project元素,project是所有pom.xml的根元素,它還聲明了一些POM相關(guān)的命名空間及xsd元素,雖然這些屬性不是必須的,但使用這些屬性能夠讓第三方工具(如IDE中的XML編輯器)幫助我們快速編輯POM。

根元素下的第一個(gè)子元素modelVersion指定了當(dāng)前POM模型的版本,對(duì)于Maven2及Maven 3來(lái)說,它只能是4.0.0。這段代碼中最重要的是groupId,artifactId和version三行。這三個(gè)元素定義了一個(gè)項(xiàng)目基本的坐標(biāo),在Maven的世界,任何的jar、pom或者war都是以基于這些基本的坐標(biāo)進(jìn)行區(qū)分的。

groupId定義了項(xiàng)目屬于哪個(gè)組,這個(gè)組往往和項(xiàng)目所在的組織或公司存在關(guān)聯(lián),譬如你在googlecode上建立了一個(gè)名為myapp的項(xiàng)目,那么groupId就應(yīng)該是com.googlecode.myapp,如果你的公司是mycom,有一個(gè)項(xiàng)目為myapp,那么groupId就應(yīng)該是com.mycom.myapp。本書中所有的代碼都基于groupId com.juvenxu.mvnbook。

artifactId定義了當(dāng)前Maven項(xiàng)目在組中唯一的ID,我們?yōu)檫@個(gè)Hello World項(xiàng)目定義artifactId為hello-world,本書其他章節(jié)代碼會(huì)被分配其他的artifactId。而在前面的groupId為com.googlecode.myapp的例子中,你可能會(huì)為不同的子項(xiàng)目(模塊)分配artifactId,如:myapp-util、myapp-domain、myapp-web等等。

version指定了Hello World項(xiàng)目當(dāng)前的版本——1.0-SNAPSHOT。SNAPSHOT意為快照,說明該項(xiàng)目還處于開發(fā)中,是不穩(wěn)定的版本。隨著項(xiàng)目的發(fā)展,version會(huì)不斷更新,如升級(jí)為1.0、1.1-SNAPSHOT、1.1、2.0等等。

最后一個(gè)name元素聲明了一個(gè)對(duì)于用戶更為友好的項(xiàng)目名稱,雖然這不是必須的,但我還是推薦為每個(gè)POM聲明name,以方便信息交流。 沒有任何實(shí)際的Java代碼,我們就能夠定義一個(gè)Maven項(xiàng)目的POM,這體現(xiàn)了Maven的一大優(yōu)點(diǎn),它能讓項(xiàng)目對(duì)象模型最大程度地與實(shí)際代碼相獨(dú)立,我們可以稱之為解耦,或者正交性,這在很大程度上避免了Java代碼和POM代碼的相互影響。比如當(dāng)項(xiàng)目需要升級(jí)版本時(shí),只需要修改POM,而不需要更改Java代碼;而在POM穩(wěn)定之后,日常的Java代碼開發(fā)工作基本不涉及POM的修改。

Main

項(xiàng)目主代碼和測(cè)試代碼不同,項(xiàng)目的主代碼會(huì)被打包到最終的構(gòu)件中(比如jar),而測(cè)試代碼只在運(yùn)行測(cè)試時(shí)用到,不會(huì)被打包。默認(rèn)情況下,Maven假設(shè)項(xiàng)目主代碼位于src/main/java目錄,我們遵循Maven的約定,創(chuàng)建該目錄,然后在該目錄下創(chuàng)建文件com/juvenxu/mvnbook/helloworld/HelloWorld.java,其內(nèi)容如下:

package com.juvenxu.mvnbook.helloworld;

public class HelloWorld
{
    public String sayHello()
    {
        return "Hello Maven";
    }

    public static void main(String[] args)
    {
        System.out.print( new HelloWorld().sayHello() );
    }
}

關(guān)于該Java代碼有兩點(diǎn)需要注意。首先,在95%以上的情況下,我們應(yīng)該把項(xiàng)目主代碼放到src/main/java/目錄下(遵循Maven的約定),而無(wú)須額外的配置,Maven會(huì)自動(dòng)搜尋該目錄找到項(xiàng)目主代碼。其次,該Java類的包名是com.juvenxu.mvnbook.helloworld,這與我們之前在POM中定義的groupId和artifactId相吻合。一般來(lái)說,項(xiàng)目中Java類的包都應(yīng)該基于項(xiàng)目的groupId和artifactId,這樣更加清晰,更加符合邏輯,也方便搜索構(gòu)件或者Java類。 代碼編寫完畢后,我們使用Maven進(jìn)行編譯,在項(xiàng)目根目錄下運(yùn)行命令 mvn clean compile 即可。

clean告訴Maven清理輸出目錄target/,compile告訴Maven編譯項(xiàng)目主代碼,從輸出中我們看到Maven首先執(zhí)行了clean:clean任務(wù),刪除target/目錄,默認(rèn)情況下Maven構(gòu)建的所有輸出都在target/目錄中;接著執(zhí)行resources:resources任務(wù)(未定義項(xiàng)目資源,暫且略過);最后執(zhí)行compiler:compile任務(wù),將項(xiàng)目主代碼編譯至target/classes目錄(編譯好的類為com/juvenxu/mvnbook/helloworld/HelloWorld.Class)。

Configuration Network Proxy

編輯~/.m2/settings.xml文件(如果沒有該文件,則復(fù)制$M2HOME/conf/settings.xml)。添加代理配置如下:


  ...

  
    my-proxy
    true
    http
    代理服務(wù)器主機(jī)名
    端口號(hào)
    
  
  
  ...
Mirror

眾所周知的原因,國(guó)內(nèi)有時(shí)候并不能夠很順暢的訪問Maven的中央倉(cāng)庫(kù),往往我們需要訪問國(guó)內(nèi)的鏡像地址:

OSChina Maven教程


CN
OSChina Central 
http://maven.oschina.net/content/groups/public/
central
Error List 網(wǎng)絡(luò)問題

(1)有時(shí)候因?yàn)楸娝苤木W(wǎng)絡(luò)問題,導(dǎo)致Maven無(wú)法訪問中央倉(cāng)庫(kù)然后扔出一大堆錯(cuò)誤,這個(gè)時(shí)候可以嘗試參考上文中的設(shè)置代理。但是也要注意,是不是有一些私庫(kù)中的Repository。

編譯問題

(1)有時(shí)候執(zhí)行mvn compile時(shí)候會(huì)爆出無(wú)法找到j(luò)unit的錯(cuò)誤,可能的解決方法有:

在Eclipse的Projects選項(xiàng)中使用Projects Clean

在pom.xml中引入junit依賴項(xiàng),并且保證其scope為compile:


    junit
    junit
    4.11
    test

(2)有時(shí)候在Eclipse下執(zhí)行mvn compile或者相關(guān)命令時(shí),會(huì)報(bào)某某文件出現(xiàn)不識(shí)別字符或者非UTF-8編碼,此時(shí)可以做幾步檢查:

檢查對(duì)應(yīng)的Java文件是否有Bom頭

檢查對(duì)應(yīng)的Java文件的編碼

如果都沒有問題,在Eclipse中先將文件編碼設(shè)置為GBK,再改回UTF-8試試。

Reference

Maven學(xué)習(xí)?

Maven實(shí)戰(zhàn)(許曉斌著)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/64673.html

相關(guān)文章

  • Docker實(shí)戰(zhàn)Quick Start

    摘要:如果使用操作系統(tǒng)自帶包安裝,目前安裝的版本是比較舊的。之前版本如果是較低版本的系統(tǒng),需要先更新內(nèi)核。然后重復(fù)上面的步驟即可。 Quick Start Installation Ubuntu 通過系統(tǒng)自帶包安裝 Ubuntu 14.04 版本系統(tǒng)中已經(jīng)自帶了 Docker 包,可以直接安裝。 $ sudo apt-get update $ sudo apt-get install -y ...

    alaege 評(píng)論0 收藏0
  • Shiro實(shí)戰(zhàn)(一) Shiro核心概念

    摘要:是什么是功能強(qiáng)大簡(jiǎn)單易用的安全框架,核心功能包括認(rèn)證授權(quán)加密以及管理。的主要作用就是用來(lái)執(zhí)行認(rèn)證和授權(quán)的邏輯,它其實(shí)就相當(dāng)于與安全數(shù)據(jù)用戶賬號(hào)密碼角色權(quán)限之間進(jìn)行交互的橋梁。至此,的三個(gè)核心概念已經(jīng)介紹完畢。 1、Shiro是什么 Shiro是功能強(qiáng)大、簡(jiǎn)單易用的Java安全框架,核心功能包括:認(rèn)證、授權(quán)、加密以及Session管理。Shiro的應(yīng)用范圍很廣泛,小型移動(dòng)端應(yīng)用、大型We...

    mdluo 評(píng)論0 收藏0
  • Java 實(shí)戰(zhàn)開發(fā)環(huán)境安裝(一)

    摘要:一軟件資源配置操作系統(tǒng)使用阿里鏡像下載我們將下載下來(lái)的系統(tǒng)安裝在虛擬機(jī)中。安裝默認(rèn)安裝路徑例如配置環(huán)境變量編輯文件在最下方增加使配置生效驗(yàn)證執(zhí)行命令,看到如圖所示代表安裝成功。 本實(shí)戰(zhàn)項(xiàng)目,將會(huì)從Linux服務(wù)器的搭建開始,直到電商項(xiàng)目的基本功能完成。 一、Linux軟件資源配置 1、操作系統(tǒng) Linux:centos6.8 64bit 使用阿里鏡像下載:https://mirror...

    abson 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<