1. 程式人生 > 實用技巧 >PHP語法—基礎

PHP語法—基礎

此文轉載自:https://blog.csdn.net/qq_39088066/article/details/101294451#commentBox

瞭解

maven是一款服務於java平臺的自動化構建工具(專案管理工具)

構建:全方位、多角度、深層次地建立

專案構建是一個專案從:原始碼、編譯、測試、打包、部署、執行的過程

用來解決團隊開發遇到的問題
如: 統一 jar包 統一配置檔案,單元測試 的程式碼位置即 目錄結構的統一

傳統的專案構建過程

1)在eclipse中建立一個java web工程
2)在工程中編寫原始碼及配置檔案等
3)對原始碼進行編譯,java檔案編譯成class檔案
4)執行Junit單元測試
5)將工程打成war包部署至tomcat執行

maven專案 構建過程

maven將項目構建的過程進行標準化,每個階段使用一個命令完成

優點:

  1. 一個命令完成構建、執行,方便快捷。
  2. maven對每個構建階段進行規範,非常有利於大型團隊協作開發。

1.3 什麼是依賴管理

什麼是依賴?一個java專案可能要使用一些第三方的jar包才可以執行,那麼我們說這個java專案依賴了這些第三方的jar包。

什麼是依賴管理?就是對專案所有依賴的jar包進行規範化管理。


總結使用maven的好處

  1. 一步構建 命令執行,標準化
  2. 依賴管理 安全又方便
  3. 跨平臺 電腦 手機都可用
  4. 團隊開發 有規程 效率高,成本低 大家都喜歡用它

核心檔案pom.xml

<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.xrq.withmaven</groupId> <artifactId>withmaven</artifactId> <version>
0.0.1-SNAPSHOT</version> <build/> </project>

1、modelVersion

指定了當前Maven模型的版本號,對於Maven2和Maven3來說,它只能是4.0.0

2、groupId

顧名思義,這個應該是公司名或是組織名。一般來說groupId是由三個部分組成,每個部分之間以".“分隔,第一部分是專案用途,比如用於商業的就是"com”,用於非營利性組織的就  是"org";第二部分是公司名, 如"tengxun"、“baidu”、“alibaba”;第三部分是你的專案名

3、artifactId

可以認為是Maven構建的專案名,比如你的專案中有子專案,就可以使用"專案名-子專案名"的命名方式

4、version

版本號,SNAPSHOT意為快照,說明該專案還在開發中,是不穩定的版本。在Maven中很重要的一點是,groupId、artifactId、version三個元素生成了一個Maven專案的基本座標,這非常重要,我在使用和研究Maven的時候多次感受到了這點。

在上面的這些元素之外,還有一些元素,同樣羅列一下:

1、packing

專案打包的型別,可以使jar、war、rar、ear、pom,預設是jar

2、dependencies和dependency

前者包含後者。前面說了,Maven的一個重要作用就是統一管理jar包,為了一個專案可以build或執行,專案中不可避免的,會依賴很多其他的jar包,在Maven中,這些依賴就被稱為dependency。

本地倉庫和遠端倉庫的概念 如下
* 本地倉庫   
* 遠端倉庫
     * 中央倉庫
     * 私服  //自己的架構包 放在上面
     * 其他公共庫  //別人的

本地倉庫 執行maven命令時才建立

maven 本地儲存的位置,有很多架構包

官方下載的本地倉庫的配置在"%MAVEN_HOME%\conf\settings.xml"裡面,找一下"localRepository"就可以了;

setting.xml:

改兩個地方

  1. 確定 本地倉庫位置
<localRepository>E:\maven\repository</localRepository>
  1. 為了提高下載速度而 配置的阿里雲映象
<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors>

MyEclipse預設的本地倉庫的地址在**"{user.home}/.m2/repository"路徑下**,同樣找一下"localRepository"就可以找到MyEclipse預設的本地倉庫了。

安裝 配置環境

首先去Maven官網,下載Maven的包,地址為http://maven.apache.org/download.cgi,找到下面的部分,點選就可以下載

將maven解壓到一個不含有中文和空格的目錄中。

  • bin目錄 mvn.bat (以run方式執行專案)、 mvnDebug.bat(以debug方式執行專案 )

  • boot目錄 maven執行需要類載入器

  • conf目錄 settings.xml 整個maven工具核心配置檔案

  • lib目錄 maven執行依賴jar包

  • 電腦上需安裝java環境,安裝JDK1.7 + 版本 (將JAVA_HOME/bin 配置環境變數path )
    配置 MAVEN_HOME

  • %MAVEN_HOME%/bin 加入環境變數 path

  • mvn -v命令檢查 maven是否安裝成功

maven倉庫的作用

本地倉庫和遠端倉庫是這樣的,Maven工程首先會從本地倉庫中獲取jar包,當無法獲取指定jar包時,本地倉庫會從遠端倉庫(中央倉庫)中下載jar包,並放入本地倉庫以備將來使用。

優先從本地倉庫查詢
預設本地倉庫位置在 u s e r . d i r / . m 2 / r e p o s i t o r y , {user.dir}/.m2/repository, user.dir/.m2/repository{user.dir}表示windows使用者目錄。

遠端倉庫

如果本地需要外掛或者jar包,本地倉庫沒有,預設去遠端倉庫下載。
遠端倉庫可以在網際網路內也可以在區域網內。

中央倉庫

在maven軟體中內建一個遠端倉庫地址http://repo1.maven.org/maven2 ,它是中央倉庫,服務於整個網際網路,它是由Maven團隊自己維護,裡面儲存了非常全的jar包,它包含了世界上大部分流行的開源專案構件。

定義maven座標

每個maven工程都需要定義本工程的座標,座標是maven對jar包的身份定義,比如:入門程式的座標定義如下:

<!--專案名稱,定義為組織名+專案名,類似包名-->
<groupId>cn.atcast.maven</groupId>

<!-- 模組名稱 -->
<artifactId>maven-first</artifactId>
<!-- 當前專案版本號,snapshot為快照版本即非正式版本,release為正式釋出版本 -->
<version>0.0.1-SNAPSHOT</version>
<packaging > :打包型別
	jar:執行package會打成jar包
	war:執行package會打成war包
	pom :用於maven工程的繼承,通常父工程設定為pom 

第一個maven

需求

建立一個web工程,實現入門程式的功能。
1)新增index.jsp,輸出hello world
2)新增一個servlet轉發到jsp頁面。

① 建立約定的目錄結構(maven工程必須按照約定的目錄結構建立)

根目錄:工程名
|—src:原始碼
|—|---main:存放主程式
|—|---|—java:java原始碼檔案
|—|---|—resource:存放框架的配置檔案
|—|---test:存放測試程式
|—pop.xml:maven的核心配置檔案
我們按照上面的資料夾目錄結構手動建立一下,不用任何IDE環境(手動的其實最有助於我們理解maven)


出錯:



專案的結構 也不對 檢查配置 和setting.xml 是否出錯

pom.xml報錯

缺少 web.xml----aa\src\main\webapp\WEB-INF

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
    <servlet>
    <description></description>
    <display-name>HelloServlet</display-name>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>cn.atcast.web.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/HelloServlet</url-pattern>
  </servlet-mapping>
   
</web-app>

NewFile.xml報錯 (新建一個xml 顯示123123)

解決:
1.

2.

3. pom.xml 包配置+ 新增servelt/jsp的包

<dependencies>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.9</version>
			<scope>test</scope>
		</dependency>

	</dependencies>

目錄

問題解決 後 讓他跑起來吧
–>Run As

案例二:

①、配置

選擇選單windows–>preferences(引數)–>maven


選擇Installations(安裝),新增你自己下載並解壓好的maven目錄。並打上對勾 √,點選Apply(應用)

再選擇User Settings目錄,在User Settings中選擇Browse(瀏覽),選擇你自己maven裡的conf下的settings.xml檔案。


插一句:settings.xml這個配置檔案,主要是配置你本地倉庫的路徑的。不想使用預設路徑,就開啟檔案,加上自己的路徑配置。

**<localRepository>C:Program FilesJavarepository</localRepository>
到此,maven整個的設定就OK了。**

專案就建立完成後,但是jdk的版本還有sevlet-api等jar包還沒有

選擇建立好的工程單擊右鍵,選擇properties 並找到 Java Build Path,把jdk的版本選擇你電腦上的正確的jdk版本。

選擇建立好的工程單擊右鍵,選擇properties 並找到 Project Facets,版本選擇3.1,下面的java版本選擇1.8,點選Apply


選擇建立好的工程單擊右鍵,找到build path


找到Libaries,新增Tomcat8.5的依賴庫,點選OK

錯誤解決

1.手動安裝Eclipse maven-archetype-quickstart
下載
C:\Users\DELL
然後從CMD裡手動安裝。

mvn install:install-file -DgroupId=org.apache.maven.archetypes -DartifactId=maven-archetype-quickstart -Dversion=X.X -Dpackaging=jar -Dfile=maven-archetype-quickstart-1.1.jar


2

解決一:

解決二:

案例三(建立一個service)

我們在之前(案例一)的基礎上 在web.xml檔案 配置一下

    <servlet>
    <description></description>
    <display-name>HelloServlet</display-name>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>cn.atcast.web.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/HelloServlet</url-pattern>
  </servlet-mapping>


Run As---->Maven build

POM檔案內容:(重點)

定義:

pom: 專案物件模型 ,是一個 XML 檔案 包含了物件是 使用maven來構建 ,每個專案只有一個pom.xml檔案

概念:父POM 類似Object類

<?xml version="1.0" ?>
<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.hzg.maven</groupId>
    <artifactId>Hello</artifactId>
    <version>0.0.1-SNAPSHOT</version> 工程版本號

    <name>Hello</name>
   <url>http://maven.apache.org</url>

project:工程的根標籤
modelVersion:pom模板版本
groupId:組織標識 (一般唯一)
artifactId:工程名稱
packaging:打包方式:JAR ,WAR ,EAR 三種

//依賴配置資訊
 <dependencies>
            <dependency>
                         <groupId>junit</groupId>
                         <artifactId>junit</artifactId>
                         <version>4.0</version>
                         <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
<build>
    <finalName>WebMavenDem</finalName>
</build>
</project>

parnt 父專案的資訊

modules 模組

properties 定義pom變數 類似 int a;

dependencyManageMent 有多模組時,統一子專案使用依賴項的同一版本 ,同時有了父模組後 ,子模組 就不會優先引用對應依賴 .同時 修改時 也只要改父類就可以了.

常用maven命令

執行maven命令必須進入到pom.xml的目錄中進行執行

進入到專案的pom.xml目錄之後,就可以執行啦。

1、執行 mvn compile

OK,執行完畢,你在pom.xml配置的依賴的包已經匯入到倉庫了,問題來了,倉庫預設的位置在哪?

倉庫的預設位置:c:Usrs[登入當前系統的使用者名稱].m2repository

剛才執行完compile之後,之前的資料夾發生了變化

我們發現Hello專案裡裡多了一個target資料夾。資料夾的內容為:

發現target裡主要存放的就是編譯後的位元組碼檔案

2、執行mvn test-compile,target資料夾下面除了classes之外多了test-classes資料夾

3、執行mvn package,target資料夾下面又多了一個打好的jar包

在這裡插入圖片描述
4、執行mvn clean,發現整個target資料夾都沒了。又回到了編譯之前我們手動建立的資料夾

五、倉庫和座標

pom.xml:Project Object Model 專案物件模型。它是maven的核心配置檔案,所有的構建的配置都在這裡設定。

② 座標:使用下面的三個向量在倉庫中唯一的定位一個maven工程

< packaging > :打包型別
jar:執行package會打成jar包
war:執行package會打成war包
pom :用於maven工程的繼承,通常父工程設定為pom

③ maven工程的座標與倉庫中路徑的關係:

maven座標和倉庫對應的對映關係:[ groupId ] [ artifactId ][version][artifactId]-[version].jar

去本地倉庫看一下此目錄:orgspringframeworkspring-core4.3.4.RELEASEspring-core-4.3.4.RELEASE.jar
果然是完全對應的

<project > :檔案的根節點 .
<modelversion > : pom.xml使用的物件模型版本
<groupId > :專案名稱,一般寫專案的域名
<artifactId > :模組名稱,子專案名或模組名稱
<version > :產品的版本號 . 
<packaging > :打包型別,一般有jar、war、pom 等 
<name > :專案的顯示名,常用於 Maven 生成的文件。  
<description > :專案描述,常用於 Maven 生成的文件
<dependencies> :專案依賴構件配置,配置專案依賴構件的座標
<build> :專案構建配置,配置編譯、執行外掛等。

六、依賴

① maven解析依賴資訊時會到本地倉庫中取查詢被依賴的jar包

對於本地倉庫中沒有的會去中央倉庫去查詢maven座標來獲取jar包,獲取到jar之後會下載到本地倉庫
對於中央倉庫也找不到依賴的jar包的時候,就會編譯失敗了

② 如果依賴的是自己或者團隊開發的maven工程,需要先使用install命令把被依賴的maven工程的jar包匯入到本地倉庫中

舉例:現在我再建立第二個maven工程HelloFriend,其中用到了第一個Hello工程裡類的sayHello(String name)方法。我們在給HelloFriend專案使用 mvn compile命令進行編譯的時候,會提示缺少依賴Hello的jar包。怎麼辦呢?

到第一個maven工程中執行 mvn install後,你再去看一下本地倉庫,你會發現有了Hello專案的jar包。一旦本地倉庫有了依賴的maven工程的jar包後,你再到HelloFriend專案中使用 mvn compile命令的時候,可以成功編譯

③ 依賴範圍



scope就是依賴的範圍

七、生命週期

Maven有三套相互獨立的生命週期,請注意這裡說的是“三套”,而且“相互獨立”,初學者容易將Maven的生命週期看成一個整體,其實不然。這三套生命週期分別是:

Clean Lifecycle 在進行真正的構建之前進行一些清理工作。Clean生命週期一共包含了三個階段:

pre-clean執行一些需要在clean之前完成的工作
clean移除所有上一次構建生成的檔案
post-clean執行一些需要在clean之後立刻完成的工作

Default Lifecycle 構建的核心部分,編譯,測試,打包,部署等等。

validate驗證工程是否正確(編譯)
generate-sources
process-resources複製並處理資原始檔,至目標目錄,準備打包
compile 編譯專案的原始碼
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources複製並處理資原始檔,至目標測試目錄
test-compile編譯測試原始碼
process-test-classes
test使用合適的單元測試框架執行測試。這些測試程式碼不會被打包或部署
prepare-package
package接受編譯好的程式碼,打包成可釋出的格式,
pre-integration-test
integration-test
post-integration-test
verify執行所有檢查,驗證包是否有效
install將包安裝至本地倉庫,以讓其它專案依賴。
deploy將最終的包複製到遠端的倉庫,以讓其它開發人員與專案共享

那我們在Hello的專案中執行 mvn install 命令,通過日誌看看中間經歷了什麼?


通過日誌我們發現,其實執行mvn install,其中已經執行了compile 和 test 。

總結:不論你要執行生命週期的哪一個階段,maven都是從這個生命週期的開始執行
外掛:每個階段都有外掛(plugin),看上面標紅的。外掛的職責就是執行它對應的命令。

Site Lifecycle 生成專案報告,站點,釋出站點。

pre-site執行一些需要在生成站點文件之前完成的工作
site生成專案的站點文件
post-site執行一些需要在生成站點文件之後完成的工作,並且為部署做準備
site-deploy將生成的站點文件部署到特定的伺服器上

九、maven工程的依賴高階特性

① 依賴的傳遞性


WebMavenDemo專案依賴JavaMavenService1 JavaMavenService1專案依賴JavaMavenService2

pom.xml檔案配置好依賴關係後,必須首先mvn install後,依賴的jar包才能使用。

WebMavenDemo的pom.xml檔案想能編譯通過,JavaMavenService1必須mvn install
JavaMavenService的pom.xml檔案想能編譯通過,JavaMavenService2必須mvn install
傳遞性:

在Eclipse中,為JavaMavenService2中增加了一個spring-core.jar包後,會驚喜的發現依賴的兩個專案都自動的增加了這個jar包,這就是依賴的傳遞性。

注意:非compile範圍的依賴是不能傳遞的。
② 依賴版本的原則:

1、路徑最短者優先原則

Service2的log4j的版本是1.2.7版本,Service1排除了此包的依賴,自己加了一個Log4j的1.2.9的版本,那麼WebMavenDemo專案遵守路徑最短優先原則,Log4j的版本和Sercive1的版本一致。

2、路徑相同先宣告優先原則

這種場景依賴關係發生了變化,WebMavenDemo專案依賴Sercive1和Service2,它倆是同一個路徑,那麼誰在WebMavenDemo的pom.xml中先宣告的依賴就用誰的版本。

③ 統一管理依賴的版本:


為了統一管理版本號,可以使用properties標籤,裡面可以自定義版本的標籤名。在使用的地方使用${自定義標籤名}

build配置

<build>
  <!-- 專案的名字 -->
  <finalName>WebMavenDemo</finalName>
  <!-- 描述專案中資源的位置 -->
  <resources>
    <!-- 自定義資源1 -->
    <resource>
      <!-- 資源目錄 -->
      <directory>src/main/java</directory>
      <!-- 包括哪些檔案參與打包 -->
      <includes>
        <include>**/*.xml</include>
      </includes>
      <!-- 排除哪些檔案不參與打包 -->
      <excludes>
        <exclude>**/*.txt</exclude>
          <exclude>**/*.doc</exclude>
      </excludes>
    </resource>
  </resources>
  <!-- 設定構建時候的外掛 -->
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.1</version>
      <configuration>
        <!-- 原始碼編譯版本 -->
        <source>1.8</source>
        <!-- 目標平臺編譯版本 -->
        <target>1.8</target>
      </configuration>
    </plugin>
    <!-- 資源外掛(資源的外掛) -->  
    <plugin>  
      <groupId>org.apache.maven.plugins</groupId>  
      <artifactId>maven-resources-plugin</artifactId>  
      <version>2.1</version>  
      <executions>  
        <execution>  
          <phase>compile</phase>  
        </execution>  
      </executions>  
      <configuration>  
        <encoding>UTF-8</encoding>  
      </configuration> 
    </plugin>
    <!-- war外掛(將專案打成war包) -->  
    <plugin>  
      <groupId>org.apache.maven.plugins</groupId>  
      <artifactId>maven-war-plugin</artifactId>  
      <version>2.1</version>  
      <configuration>
        <!-- war包名字 -->  
        <warName>WebMavenDemo1</warName>
      </configuration>  
    </plugin>  
  </plugins>
</build>


配置好build後,執行mvn package之後,在maven工程指定的target目錄裡war包和檔案都按照配置的生成了

加入第三方架包

Maven私服

  1. 問題:專案組編寫了一個通用的工具類,其它專案組將類拷貝過去使用,當工具類修改bug後通過郵件傳送給各各專案組,這種分發機制不規範可能導致工具類版本不統一。

解決方案:專案組將寫的工具類通過maven構建,打成jar,將jar包釋出到公司的maven倉庫中(私服),公司其它專案通過maven依賴管理從倉庫自動下載jar包。

私服(用於jar的釋出 和下載)

  1. 公司在自己的區域網內搭建自己的遠端倉庫伺服器,稱為私服私服伺服器即是公司內部的maven遠端倉庫,每個員工的電腦上安裝maven軟體並且連線私服伺服器,員工將自己開發的專案打成jar併發布到私服伺服器,其它專案組從私服伺服器下載所依賴的構件(jar)。

  2. 私服還充當一個代理伺服器,當私服上沒有jar包會從網際網路中央倉庫自動下載

依賴版本衝突

依賴版本衝突:當一個專案依賴的構件比較多時,它們相互之前存在依賴,當你需要對依賴版本統一管理時如果讓maven自動來處理可能並不能如你所願,如下例子:
(傳遞依賴:當A 依賴B、B依賴C,在A中匯入B後會自動匯入C,C是A的傳遞依賴,如果C依賴D則D也可能是A的傳遞依賴。)

<!-- struts2-spring-plugin依賴spirng-beans-3.0.5 -->
  	<dependency>
  		<groupId>org.apache.struts</groupId>
  		<artifactId>struts2-spring-plugin</artifactId>
  		<version>2.3.24</version>
  	</dependency>
<!-- spring-context依賴spring-beans-4.2.4 -->
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-context</artifactId>
  		<version>4.2.4.RELEASE</version>
  	</dependency>

org.apache.struts依賴spirng-beans-3.0.5,spring-context依賴spring-beans-4.2.4,但是發現spirng-beans-3.0.5加入到工程中,而我們希望spring-beans-4.2.4加入工程。

依賴調解原則

maven自動按照下邊的原則調解:

宣告者優先原則
在pom檔案定義依賴,先宣告的依賴為準。

測試:
如果將上邊struts-spring-plugins和spring-context順序顛倒,系統將匯入spring-beans-4.2.4。
分析:
由於spring-context在前邊,以spring-context依賴的spring-beans-4.2.4為準,所以最終spring-beans-4.2.4新增到了工程中。

排除依賴

上邊的問題也可以通過排除依賴方法輔助依賴調解,如下:
比如在依賴struts2-spring-plugin的設定中新增排除依賴,排除spring-beans,
下邊的配置表示:依賴struts2-spring-plugin,但排除struts2-spring-plugin所依賴的

spring-beans。

<!-- struts2-spring-plugin依賴spirng-beans-3.0.5 -->
<dependency>
	<groupId>org.apache.struts</groupId>
	<artifactId>struts2-spring-plugin</artifactId>
	<version>2.3.24</version>
	<!-- 排除 spring-beans-->
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
		</exclusion>
	</exclusions>
</dependency>

鎖定版本

面對眾多的依賴,有一種方法不用考慮依賴路徑、宣告優化等因素可以採用直接鎖定版本的方法確定依賴構件的版本,版本鎖定後則不考慮依賴的宣告順序或依賴的路徑,以鎖定的版本的為準新增到工程中,此方法在企業開發中常用。
首先父工程中pom.xml檔案新增
如下的配置是鎖定了spring-beans和spring-context的版本:

最後推薦個最新最全的maven依賴項版本查詢網站:

http://mvnrepository.com/


  1. 建立 maven maven-archetype-quickstart 專案抱錯問題解決方法

  2. Archetype,骨架的意思。
    文章出處:http://m.blog.csdn.net/blog/FireOfStar/42526027
    Archetype是什麼?
    簡單的說,Archetype是Maven工程的模板工具包。一個Archetype定義了要做的相同型別事情的初始樣式或模型。這個名稱給我們提供來了一個一致的生成Maven工程的方式。Archetype會幫助作者給使用者建立Maven工程模板,並給使用者提供生成相關工程模板版本的引數化方法。
    使用Archetype提供的好的方法,是開發者能夠使用最佳實踐來快速的構建和組織一致化的工程。在Maven工程中,我們努力使用Archetype來儘可能快的給使用者提供示例工程,同時也會把Maven的最佳實踐介紹給新的使用者。一個新的使用者可以使用工作中的Maven工作作為跳板來研究更過的Maven中功能。我們也可以使用Archetype的新增機制,這樣就意味著允許我們抓取Archetype中專案片段,並把它們新增到既存的工程中。Maven網站的Archetype就是很好的例子。例如,你可以使用“quick start archetype”來生成一個工程,然後就可以通過其中既存的“site archetype”來快速的建立一個網址工程。你能夠使用Archetype來做很多這樣的事情。
    在你的團隊中可能想要標準化的J2EE開發,這需要你提供EJBs、或者是WARs、或者是Web services的原型。一旦在你團隊資源庫中建立和部署這些原型,它們就可以在你團隊內共享使用。
    如何使用Archetype
    要基於Archetype來建立一個新的工程,需要像下面示例這樣來呼叫:

mvn archetype:generate

已有的Archetypes

Archetype ID

說明

maven-archetype-archetype

一個樣例原型

maven-archetype-j2ee-simple

簡單的J2EE應用程式樣例

maven-archetype-mojo

Maven外掛樣本的示例

maven-archetype-plugin

Maven外掛樣本

maven-archetype-plugin-site

Mave外掛網站的樣例

maven-archetype-portlet

JSR-268門戶樣例

maven-archetype-quickstart

Maven工程樣例

maven-archetype-simple

一個簡單的Maven工程

maven-archetype-site

Maven網站的樣例,它演示了對諸如APT、XDoc和FML等文件型別的支援,並演示瞭如果把網站國際化(i18n)

maven-archetype-site-simple

Maven網站樣例

maven-archetype-webapp

Maven的Webapp工程樣例

常用Archetype
1,maven-archetype-quickstart
預設的Archetype,基本內容包括:
一個包含junit依賴宣告的pom.xml
src/main/java主程式碼目錄及一個名為App的類
src/test/java測試程式碼目錄及一個名為AppTest的測試用例

2,maven-archetype-webapp
一個最簡單的Maven war專案模板,當需要快速建立一個Web應用的時候可以使用它。生成的專案內容包括:
一個packaging為war且帶有junit依賴宣告的pom.xml
src/main/webapp/目錄
src/main/webapp/index.jsp檔案
src/main/webapp/WEB-INF/web.xml檔案

pom.xml 配置檔案 如果第一次的話 可以複製下來 幫助你下載完整外掛 最後檢查 對不對標誌(目錄結構是否正確)

<?xml version="1.0" encoding="UTF-8"?>

<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.alipay.test</groupId>
  <artifactId>test</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>test</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>com.alipay.sdk</groupId>
      <artifactId>alipay-sdk-java</artifactId>
      <version>3.0.0</version>
      <exclusions>
        <exclusion>
          <artifactId>commons-logging</artifactId>
          <groupId>commons-logging</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.6</version>
    </dependency>
    <dependency>
      <groupId>commons-configuration</groupId>
      <artifactId>commons-configuration</artifactId>
      <version>1.10</version>
      <exclusions>
        <exclusion>
          <artifactId>commons-logging</artifactId>
          <groupId>commons-logging</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.11</version>
    </dependency>
    <dependency>
      <groupId>com.google.zxing</groupId>
      <artifactId>core</artifactId>
      <version>3.2.1</version>
    </dependency>
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-core</artifactId>
      <version>1.3</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.5</version>
    </dependency>


  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>