1. 程式人生 > >Maven配置和使用(一)

Maven配置和使用(一)

Maven配置和使用

  • Maven簡介
    如果我要是進行歸類的,也會把Maven規劃為SCM軟體的一種,它也屬於一種專案的管理工具,但是與傳統的SVN等工具不同的是,Maven主要是進行開發包的管理。
    現在的軟體專案的開發絕對不可能自己從頭寫到尾,因為在這之中需要引入大量的第三方開發工具包,而我們對於這些開發包的引用,最初的做法:下載下來*.jar檔案,而後在需要的地方拷貝到專案的WEB-INF/lib目錄之中就可以使用了,但是這種方式很多時候並不方便,如果說現在開發包的版本很多。
    所以為了解決這樣的問題,專門由Apache提供了一個開發包的工具管理—–Maven
    Maven除了開發包管理之外還可具備專案的編譯、測試等功能。
    Maven在實際使用中–主要是開發包的管理
    下面首先來觀察一個簡單的開發包管理操作:
    這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述
此時最終會形成一個cn.mldn.em的總的開發包。隨後會開始進行專案的構建,但是這個的構建過程取決於網路問題。
在整個的Maven之中,對於所有的開發包管理實際上都是依靠了一個pom.xml檔案完成的,這個檔案可以實現開發包的版本切換,當然也可以進行一些連線的配置,或者是專案子模組的配置。

這裡寫圖片描述

如果現在需要進行開發包的管理,那麼可以登陸一個Maven倉庫:http://mvnrepository.com/
範例:更換Junit版本
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述
實際上Maven會把所有的開發包放在指定的目錄之中:C:/User/使用者名稱/.m2/repository
這個路徑在後期是可以指定的

這裡寫圖片描述

總結:
1.Maven適合於做開發包的管理
2.如果所有的開發者都通過網路下載開發包,那麼這個速度實在是不敢恭維
3.eclipse如果要建立Maven專案,JDK版本是有差異的。

  • 在windows中配置maven

如果要想進行Maven的使用,那麼必須登陸:maven.apache.org上取得Maven開發包。
這裡寫圖片描述

下載首頁:
外國的官網專案程式碼一般都有相關的相關文件手冊
本次使用的開發包版本為:3.5.4版本,但是需要記住的是從Maven2.x開始,Maven分為兩種版本:Maven1、Maven2。現在使用的都是Maven2的版本。

配置的話:Configure文件

下載版本:
這裡寫圖片描述

linux下用的tar.gz包,也有windows下的zip包
相關文件說明:
這裡寫圖片描述

現在是在windows下進行配置:所以此次使用的版本為:apache-maven-3.5.4-bin.zip,將其進行解壓縮。

1.Maven本身需要JDK的配置支援,所以首先一定要在系統環境之中配置JAVA_HOME(JDK安裝目錄)
2.將Maven的開發工具包的命令設定到Path屬性之中:
–Maven的命令路徑:E:\Maven\apache-maven-3.5.4-bin\apache-maven-3.5.4\bin
3.測試Maven的命令是否已經配置成功,隨意開啟一個命令列視窗,輸入:”mvn -v”:
如果報錯:
這裡寫圖片描述
經查,此問題是由於JDK版本過低導致,最新的MAVEN 3.3.3 必須由JDK1.7以上支援,
所以更改JavaHome為Jdk1.7以上即可。

這裡寫圖片描述

表示Maven已經配置完成。(描述整個Maven當前的環境資訊)
這樣並不意味著配置全部完成。

4.如果要想進行Maven的操作,預設情況下使用的是都是遠端的國外的倉庫進行連線,那麼這個速度實在是太慢了,所以為了讓開發包的下載速度變快,建議將現在的倉庫變為國內倉庫(不用過牆):
如果要想修改為國內倉庫,可以使用oschina的提供的Maven倉庫,倉庫地址:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
   <mirrors>
    <mirror>
      <id>localMaven</id>
      <mirrorOf>*</mirrorOf>
      <name>MyMaven</name>
      <url>http://maven.oschina.net/content/groups/public/</url>
    </mirror>
  </mirrors>
</settings>

隨後修改Maven開發包中的”conf/settings.xml”檔案:
E:\Maven\apache-maven-3.5.4-bin\apache-maven-3.5.4\conf\settings.xml
把下圖的內容修改:
這裡寫圖片描述

這裡寫圖片描述

表示配置好了國內倉庫

注意這個國內倉庫 已經不能用了:

<mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

或者:
這裡寫圖片描述

<localRepository>E:\Maven\repository</localRepository>

這樣再進行開發包下載的時候速度就會得到很大的提升,如果你不配置,那麼整個程式的執行速度就會非常慢,(因為偉大的防火牆在阻撓)

5.隨後利用Maven進行一次專案的開發編寫操作,本次先使用記事本的方式完成,目的是希望可以輸出”hello world”!

在E盤上建立一個javawork目錄,所有的資訊都儲存在此目錄之中:
進入到javawork目錄之中(cd javawork),隨後需要建立一個檔案,在我們的maven裡面所有的java源程式都要求儲存在src目錄下(src/main/java/包名稱)
E:\javawork>mkdir src\main\java\cn\mldn
在這個 src\main\java\cn\mldn目錄下新建一個Hello.java的檔案
package cn.mldn
public class Hello{
public static void main(String args[]){
System.out.println(“Hello World!”);
}
}
如果要想編譯,還需要在E:\javawork目錄下存在有一個pom.xml檔案:這個檔案直接複製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>cn.mldn</groupId>
  <artifactId>em</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

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

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

在此檔案之中有以下的幾個重要的配置資訊:
<modelVersion>4.0.0</modelVersion>
這個表示POM模組版本資訊(通常都是4.0.0)
<groupId>cn.mldn</groupId>
描述的是專案所屬的組織名稱,現在是cn.mldn
<artifactId>em</artifactId>
描述的是專案的名稱,最後會與groupId結合作為包名稱
<version>0.0.1-SNAPSHOT</version>
描述專案的版本號
<packaging>jar</packaging>
最終專案的釋出形式,一般都是jar或者war;(war包指的是web的應用檔案)

6.對專案進行打包編譯:(專案打包編譯必須要有pom.xml檔案的支援,在路徑下必須存在此檔案)
cd javawork
mvn compile
編譯時會從遠端下載jar包,一次執行,多次使用

這裡寫圖片描述

7.這個時候已經完成了程式碼的編譯;
此時會在“e:\javawork”目錄下生成一個target的子目錄,這個子目錄儲存的就是所有編譯後的程式檔案 Hello.class

8.將生成的*.class檔案打包成一個jar包的形式出現(還是在pom.xml所在的目錄):

mvn package
也會從網路上下載需要jar包,一次下載,多次使用

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

於此同時,本地倉庫的位置下的jar包會逐漸增大(幾個G很正常):
由於之前配置了setting.xml下的本地倉庫的位置:
E:\Maven\repository
所以
這裡寫圖片描述

表示打成了jar包(可執行)
此時的jar檔案儲存在了“e:\javawork\target”目錄下;此時的jar寶名稱為:em-0.0.1-SNAPSHOT.jar
這個名稱是與pom.xml中配置的有關係 版本號0.0.1-SNAPSHOT name em有關

9.直接執行jar檔案(在javawork目錄下執行)
java -cp target/em-0.0.1-SNAPSHOT.jar cn.mldn.Hello

這裡寫圖片描述

這樣就完成了整個的Maven基礎的操作開發,所以現在可以發現,Maven可以負責開發包的管理,可以負責專案的打包生成。通過Maven管理的專案軟體,非常適合於現在的開源環境,因為對於專案的打包會非常的容易處理。
很多包都是以em-0.0.1-SNAPSHOT.jar 的形式出現。現在幾乎所有的專案都是用Maven進行開發包的管理和控制,以及打包。
所有的開發團隊要求用Maven進行開發編寫
maven還可以寫測試
重點:—對於開發包進行有效管理

  • 在Linux下配置Maven
    本次在Linux下的Maven配置和之前在windows下的配置區別不大:
    1.需要準備出Linux下的Maven開發包:
    apache-maven-3.5.4-bin.tar.gz,將開發包通過FTP上傳到Linux之中
    2.上傳之後開發包會儲存在“/srv/ftp”目錄之中,隨後將其解壓縮到“/usr/local”目錄下
    前提:需要在此Linux系統之中準備好相應的JDK開發環境(JAVA_HOME)
    tar xzvf /srv/ftp/apache-maven-3.5.4-bin.tar.gz -C /usr/local
    3.為了方便配置建議將maven開發包的目錄進行更名,
    mv apache-maven-3.5.4/ maven
    4.在環境配置檔案之中,配置Maven的相關資訊
    M2_HOME:是Maven2版本之後標記
    vim /etc/profile 修改系統環境變數屬性
    在裡面追加如下的內容:
    export M2_HOME = /usr/local/maven
    export PATH = PATH:JAVA_HOME/bin:$M2_HOME/bin:

這裡寫圖片描述

5.使用source命令,讓配置立即生效:
source /etc/profile
6.隨後繼續使用“mvn -v”的命令來測當前的Maven是否工作正常

這裡寫圖片描述

會顯示Maven的版本資訊以及jdk版本資訊

7.下面需要進行倉庫資訊的配置,修改/usr/local/maven/conf/settings.xml檔案
執行:vim /usr/local/maven/conf/settings.xm
找mirrors對應項,配置為國內本地倉庫

8.儲存退出之後下載在“/usr/local/”目錄下建立javawork目錄:而後在javawork目錄裡面需要有/src/main/java/cn/mldn/
建立相應的檔案目錄:
mkdir -p /usr/local/javawork//src/main/java/cn/mldn/
在/usr/local/javawork//src/main/java/cn/mldn/目錄下建立Hello.java的檔案:
vim Hello.java

將pom.xml檔案拷貝到專案之中
通過ftp上傳之後,隨後拷貝到/usr/local/javawork/目錄裡邊
此時pom.xml與src目錄儲存在同級別:
cp /srv/ftp/pom.xml /usr/local/javawork

9.對程式進行編譯處理:
mvn compile
此時如果連不上一些倉庫,可以修改為國內倉庫
也可能是因為DNS沒有配置
vim /etc/resolv.conf
追加:
nameserver 114.114.114.114
這裡寫圖片描述

先測試 ping www.baidu.com
或者選擇重啟網絡卡
/etc/init.d/networking restart
之後繼續執行 mvn compile
10.編譯之後一定會在“/usr/local/javawork/target”目錄下勝場class檔案,而後將這些檔案進行打包處理。
mvn package
11.生成*.jar檔案之後就可以進行程式的直接執行:
java -cp target/em-0.0.1-SNAPSHOT.jar cn.mldn.Hello

此時就完成了在Linux下的Maven配置,基本的就成和windows相似。

關於靜態IP:
1.Maven這種配置工具在各個平臺下(Linux、Windows、Unix)
的使用都是類似的
2.在Linux中靜態IP的配置
需要開啟一個靜態IP的配置檔案
vim /etc/network/interfaces (描述整個Linux的靜態配置)
在這個檔案中如果是自動的IP地址獲取,則資訊如下:
這裡寫圖片描述

主要是DHCP

如果要想進行手工的IP配置,則需要將動態IP註釋掉,而後增加如下內容:
這裡寫圖片描述

eno16777736 :網絡卡名字 static:表示靜態
adress: IP地址
netmask :子網掩碼
gateway :閘道器

這裡寫圖片描述

當配置檔案完成之後,還需要進行DNS解析的檔案配置:
vim /etc/resolv.conf
開啟之後增加DNS地址資訊:
nameserver 114.114.114.114
重新啟動網絡卡
/etc/init.d/networking restart
如果你配置的是新的靜態IP地址,那麼你的SSH需要重新進行連線

強烈建議:如果不是必須,如果你的linux不是作為公共伺服器連線,不要去配置靜態IP
個人使用Linux 建議大家虛擬機器網路中使用NAT模式
這裡寫圖片描述

但是在區域網內,如果你要是多臺主機連線一臺linux伺服器,則設定 橋接模式,個人不需要用橋接模式。

- *搭建Nexus私服

在一個我們的專案的團隊之中,一定會有多臺主機需要通過Maven取得相關的開發包,那麼這個時候如果所有的主機都通過Maven的伺服器進行開發包的下載,基本上每臺電腦上快取(1G-2G),那麼這個時候網路根本就受不了,而且這些包都是重複下載的,沒有任何意義,正因為如此,在團隊的專案開發之中,會使用Nexus工具搭建一個私服,所有的開發者通過這個私服進行下載,如果現在需要的一個開發包在私服上不存在,那麼就會自動通過一個Maven的中央倉庫進行下載,並且將這個開發包儲存在Nexus伺服器上,這樣當其他人需要此開發包的時候就不再需要通過網路下載開發包,而是直接使用Nexus伺服器上的開發包即可。

Nexus基本結構:
這裡寫圖片描述

這個工具是免費的(Nexus),可以直接通過“http://www.sonatype.com/download-oss-sonatype”網站上下載:
OOS免費開源版本:
這裡寫圖片描述
本次使用的是“nexus-2.14.4-03-bundle.tar.gz”開發版本,這個版本就是一個war檔案,上傳到linux下即可(不一定要在Linux下配置),各個平臺都可以配置,
因為這個地方需要下載包,而且下載包預設都是在C盤,系統受不了。
建議最好有單獨的伺服器執行私服Nexus
前提:你的Linux系統裡面已經配置好了JDK以及JAVA_HOME

1.將nexus開發包進行上傳;
2.隨後將檔案解壓縮到“/usr/local/mynexus”目錄之中
先建立“/usr/local/mynexus”資料夾:
mkdir /usr/local/mynexus
將上傳的壓縮檔案進行解壓縮控制:
tar xzvf /srv/ftp/nexus-2.14.4-03-bundle.tar.gz -C /usr/local/mynexus
cd /usr/local/mynexus

解壓縮後可以發現會有兩個子資料夾出現,主要使用的是nexus-2.14.4-03,另外一個是“sonatype-work”儲存的是所有的配置檔案的資訊。

3.進入到/usr/local/mynexus/nexus-2.14.4-03目錄下
cd /usr/local/mynexus/nexus-2.14.4-03
而後準備啟動nexus的專案

nexus自動集成了jetty工具包,這個就屬於小型的webContainer
,它可以自動啟動一個web服務
進入到bin目錄下
cd /usr/local/mynexus/nexus-2.14.4-03/bin
編輯“nexus”檔案
vim /usr/local/mynexus/nexus-2.14.4-03/bin/nexus
裡邊有個RUN_AS_USER,修改為root

這裡寫圖片描述

需要修改執行的使用者(沒用):RUN_AS_USER = root

啟動nexus服務:bin目錄下執行
cd /usr/local/mynexus/nexus-2.14.4-03/bin
./nexus start

4.現在相當與內部啟動了一個小型的WEB伺服器,那麼這個伺服器可以直接通過IP地址找到
連線地址:http://IP地址:8081/nexus/
就可以進入到控制檯:不要隨意修改
這裡寫圖片描述

這裡寫圖片描述

5.完成之後進行登陸,使用者名稱為admin,密碼為admin123

這裡寫圖片描述

登陸成功:
這裡寫圖片描述

Public Repositories
最關注的是Central

6.將所有的proxy中的下載配置開啟

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

選擇repair index,否則可能導致無法下載:
這裡寫圖片描述

7.雖然這個時候配置好了maven私服,但是這個私服要想使用還需要在配置檔案裡面進行引用:

第一種模式,修改每一個專案的pom.xml檔案:

    <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://192.168.28.253:8081/nexus/context/groups/public/</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://192.168.28.253:8081/nexus/context/groups/public/</url>
    </pluginRepository>
  </pluginRepositories>

表示所有的下載都通過私服下載,如果私服沒有,則通過網路下載

這個配置只針對一個配置檔案有效,多個專案的時候採用第二種模式

第二種模式:在settings.xml檔案中配置一個公共的私服下載:
先配置連線伺服器:

<servers>
    <server>
        <id>nexus-releases</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
    <server> 
        <id>nexus-snapshots</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
</servers>

配置連線映象:

    <mirror>
        <id>nexus-releases</id>
        <mirrorOf>*</mirrorOf>

  <url>http://192.168.28.253:8081/nexus/context/groups/public/</url>
    </mirror>
    <mirror>
        <id>nexus-snapshots</id>
        <mirrorOf>*</mirrorOf>

  <url>http://192.168.28.253:8081/nexus/context/groups/public/public-snapshots</url>
    </mirror>

設定核心配置檔案:

<profiles> 
<profile>
      <id>env-dev</id>
      <repositories>
        <repository>
            <id>Public</id>
            <name>Public Repositories</name>
            <url>http://192.168.28.253:8081/nexus/content/groups/public/</url>
            <layout>default</layout>
            <snapshotPolicy>always</snapshotPolicy>
        </repository>
      </repositories>
    </profile>
 <profiles> 

啟動配置檔案:

<activeProfiles>  
<activeProfile>env-dev</activeProfile>  
    </activeProfiles> 

這樣就表示所有的開發包將通過私服nexus進行下載:

按照之前的javawork專案,在pom.xml新增開發包:servlet包、
jstl包等
這裡寫圖片描述

證明通過私服(在linux遠端伺服器上)去網路下載,再次下載時只需要通過私服下載,無須通過網路。

檢視私服伺服器上是否有對應jar包
這裡寫圖片描述

此處是有內容的,表示私服已經開始工作。
二次下載速度得到很大的提升。

Maven和私服Nexus一定是聯絡緊密的。

一個團隊裡面一定要有一個專門的nexus私服存在,為所有的開發者提供方便。而且私服還是去標準的中央倉庫進行下載,也許速度慢,但是由於就下載一次,所以無所謂。

  • Eclipse+Maven

在開發之中對於開發包的管理一直是一件頭疼的事情,而我們最初的時候可以使用Eclipse進行開發包的管理的管理操作,並且基本上eclipse都能夠保證開發包的正確(很多時候錯誤的話也讓人很頭疼)。於是有了Maven之後,現在就可以拋開這種智慧化的開發工具,直接使用原生的Eclipse J2EE版工具進行開發。
同時專案之中存在nexus私服,這樣也有利於整個專案團隊的開發包的管理。

1.如果要想在eclipse之中使用Maven,必須保證已經準備好了Maven相關的開發包,同時已經配置好了settings.xml檔案,這個檔案裡面定義有私服的連結地址。
eclipse首選項 —Maven
這裡寫圖片描述
新增新的Maven配置,安裝自己的maven開發工具包,表示已經可以使用。
2.而後還需要將之前開發裡面配置的settings.xml檔案的路徑設定到eclipse之中。
User-Settings
這裡寫圖片描述

3.建立一個maven專案,但是要求是基於webapps結構定義的
速度會比較慢,整個專案的建立可能無法一次性成功,如果不行就多建立幾次,重新啟動eclipse。

這裡寫圖片描述
此時組織名稱為cn.mldn,而專案名稱為crm,所以最終的包名稱就是cn.mldn.crm。
如果此時發現無法建立的話,有可能是你的網路問題,也有可能是你的環境問題,總之,Maven的處理操作有很多不確定性。

4.但是需要注意的是,此時的Maven的專案預設是基於jdk1.5(j2SE5.0)的,需要將其變更為jdk1.7的環境。

這裡寫圖片描述

更改完成之後:
這裡寫圖片描述

報錯,原因可能是沒有servlet包,所以需要在本專案的pom.xml中新增servlet包,即可
這裡寫圖片描述

隨後更改完級別之後

5.除了更改整個專案的JDK使用庫之外,還需要將編譯的級別變變更為 jdk1.7。
除此之外:Facets Project也需要調整為JDK1.7

這裡寫圖片描述

6.還需要修改整個專案之中的整體配置項:
先更新java的版本為1.7
隨後取消動態的web配置,先應用,先將其修改為3.1,再應用,在將其選中;

7.隨後還要求隨意建立一個web專案,目的是拷貝一些檔案出來,
(WEB-INF下的web.xml)
將web.xml檔案拷貝到新專案之中

8.此時配置完成,隨後就可以將其釋出到tomcat之中進行使用了。
新建index.jsp
啟動tomcat並可以訪問得到

總結:
這種配置的處理操作有一些複雜,特別是已經習慣於使用MyEclipse的開發人員,但是這個在很多的開發之中都會使用。
所以Eclipse+Maven這樣的開發必須掌握熟練。

包含私服Nexus的使用過程。