maven 是基於項目對象模型(Project Object Model, POM),通過一小段描述信息來管理項目的構建,報告,文檔的軟件項目管理工具。
目前,絕大多數開發人員都把 Ant 當作 java編程項目的標準構建工具。但是,Ant 的項目管理工具(作爲 make的替代工具)不能滿足絕大多數開發人員的需要。通過檢查 Ant 構建文件,很難發現項目的相關性信息和其它元信息(如開發人員/擁有者、版本或站點主頁)。
Maven 除了以程序構建能力爲特色之外,還提供 Ant 所缺少的高級項目管理工具。由於 Maven 的缺省構建規則有較高的可重用性,所以常常用兩三行 Maven 構建腳本就可以構建簡單的項目,而使用 Ant 則需要十幾行。事實上,由於 Maven 的面向項目的方法,許多 Apache Jakarta 項目現在使用 Maven,而且公司項目採用 Maven 的比例在持續增長。
Maven這個單詞來自於意第緒語,意爲知識的積累,最早在Jakata Turbine項目中它開始被用來試圖簡化構建過程。當時有很多項目,它們的Ant build文件僅有細微的差別,而JAR文件都由CVS來維護。於是Maven創始者開始了Maven這個項目,該項目的清晰定義包括,一種很方便的發佈項目信息的方式,以及一種在多個項目中共享JAR的方式。
Maven 和 Ant 有什麼不同呢?
Ant 爲 Java 技術開發項目提供跨平臺構建任務
Maven 本身描述項目的高級方面,它從 Ant 借用了絕大多數構建任務
要先裝好jdk
官網:http://maven.apache.org/index.html
安裝過程:
[root@MiWiFi-R1CM-srv ~]# cd /usr/local/src/
[root@MiWiFi-R1CM-srv apache-maven]# tar zxf apache-maven-3.0.5-bin.tar.gz -C /usr/local/ [root@MiWiFi-R1CM-srv apache-maven]# mv /usr/local/apache-maven-3.0.5 /usr/local/apache-maven
配置環境變量:
echo -e '#!/bin/bash\nexport MAVEN_HOME=/usr/local/apache-maven\nexport PATH=$PATH:$MAVEN_HOME/bin' >/etc/profile.d/maven.sh [root@MiWiFi-R1CM-srv apache-maven]# source /etc/profile.d/maven.sh
驗證:
[root@MiWiFi-R1CM-srv apache-maven]# mvn -v
出現下面提示代表安裝成功
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 21:51:28+0800)
Maven home: /usr/local/apache-maven
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: /usr/local/src/jdk1.8.0_60/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-431.el6.x86_64", arch: "amd64", family: "unix"
maven的配置文件:
setting.xml 配置文件,在安裝目錄(/usr/local/apache-maven/conf/settings.xml)和本地目錄(/home/homer/.m2/settings.xml)都有,區別:
1) 安裝目錄(conf/settings.xml),是對本機器上所有用戶有效(同一臺機器可以有多個用戶,均有效),全局設置
2) 當前目錄(.m2/settings.xml),僅對當前用戶有效,局部設置
maven還有一個配置文件pom.xml,是在java項目的根目錄下,僅對當前項目有效,局部設置
更多關於maven的使用:
http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html
前邊簡單介紹了Maven,而Maven默認提供的中央倉庫是在遠程網絡服務Appache提供的,這對於我們開發時不合理的。如果我們沒網了或者什麼情況,我們怎麼辦?也就是說我們隊中央倉庫的依賴性太大。而Nexus私服則可以解決我們這個問題。先看下這張圖應該大家就非才明白了:
這樣就相當於在我們本地的局域網搭建了一個類似中央倉庫的服務器,我們開始將中央倉庫的一些資料下載到私服務器上,然後平時我們的maven項目就是直接訪問局域網內的私服即可,既節省了網絡帶寬也會加速項目搭建的進程,這樣對我們開發來說,對公司來說都是非常好的選擇。
搭建Nexus:
要先裝好jdk
下載地址:http://www.sonatype.org/nexus/archived_version?id=38
[root@MiWiFi-R1CM-srv src]# wget [root@MiWiFi-R1CM-srv src]# tar -zxf nexus-2.9.0-bundle.tar.gz -C /usr/local/ [root@MiWiFi-R1CM-srv src]# mv /usr/local/nexus-2.9.0-bundle /usr/local/nexus
配置nexus(根據需要配置nexus監聽的端口號):
sed -i 's/application-port=8081/application-port=8088/g' nexus/conf/nexus.properties
啓動方法一、
配置環境變量(RUN_AS_USER=root)表示使用root運行nexus:
[root@MiWiFi-R1CM-srv ~]# echo -e '#!/bin/bash\nexport NEXUS_HOME=/usr/local/nexus\nexport PATH=$PATH:$NEXUS_HOME/bin\nexport RUN_AS_USER=root' >/etc/profile.d/nexus.sh [root@MiWiFi-R1CM-srv ~]# source /etc/profile.d/nexus.sh [root@MiWiFi-R1CM-srv local]# /usr/local/nexus/bin/nexus start [root@MiWiFi-R1CM-srv local]# netstat -tlunp |grep 8088
tcp 0 0 0.0.0.0:8088 0.0.0.0:* LISTEN 2671/java
啓動方法二(service)、
step1(拷貝啓動腳本)
[root@MiWiFi-R1CM-srv local]# cd /usr/local/nexus/ [root@MiWiFi-R1CM-srv nexus]# cp bin/jsw/linux-x86-64/nexus /etc/init.d/
step2(修改腳本)
[root@MiWiFi-R1CM-srv nexus]# vim /etc/init.d/nexus
新增六行參數
# chkconfig: 2345 66 39 # description: running&stop nexus service. RUN_AS_USER=root NEXUS_HOME=/opt/pht/nexus-2.5.1-01 PLATFORM=linux-x86-64 PLATFORM_DIR="${NEXUS_HOME}/bin/jsw/${PLATFORM}"
修改三行參數
WRAPPER_CMD="${PLATFORM_DIR}/wrapper" WRAPPER_CONF="${PLATFORM_DIR}/../conf/wrapper.conf" PIDDIR="${NEXUS_HOME}"
編輯warpper配置文件
[root@MiWiFi-R1CM-srv nexus]# vim /usr/local/nexus/bin/jsw/linux-x86-64/../conf/wrapper.conf
修改一行參數:
修改前:
wrapper.java.command=java
修改後(你的jdk安裝目錄):
wrapper.java.command=/usr/jdk1.7.0_67/bin/java
step3(增加執行權限)
[root@MiWiFi-R1CM-srv nexus]# chmod +x /etc/init.d/nexus
step4(交給chkconfig管理)
[root@MiWiFi-R1CM-srv nexus]# chkconfig --add nexus
step5(啓動)
[root@MiWiFi-R1CM-srv nexus]# service nexus start
step6(排錯)
[root@MiWiFi-R1CM-srv nexus]# ps -ef |grep nexus root 12762 34939 0 10:08 pts/2 00:00:00 grep nexus
nexus進程剛開始會出現,過一會就沒有了,繼續查看連接狀態
[root@MiWiFi-R1CM-srv nexus]# netstat -tlun |grep 7777 [root@MiWiFi-R1CM-srv nexus]#
沒有連接,查看wrapper日誌文件
啓動報錯解決:
wrapper | --> Wrapper Started as Daemon wrapper | Launching a JVM... wrapper | Unable to start JVM: No such file or directory (2) wrapper | JVM exited while loading the application. wrapper | Reloading Wrapper configuration... wrapper | Launching a JVM... wrapper | Unable to start JVM: No such file or directory (2) wrapper | JVM exited while loading the application. jvm 2 | wrapper | Unable to start JVM: No such file or directory (2) wrapper | Reloading Wrapper configuration... wrapper | Launching a JVM... wrapper | Unable to start JVM: No such file or directory (2) wrapper | JVM exited while loading the application. jvm 3 | wrapper | Unable to start JVM: No such file or directory (2) wrapper | Reloading Wrapper configuration... wrapper | Launching a JVM... wrapper | Unable to start JVM: No such file or directory (2) wrapper | JVM exited while loading the application. jvm 4 | wrapper | Unable to start JVM: No such file or directory (2) wrapper | Reloading Wrapper configuration... wrapper | Launching a JVM... wrapper | Unable to start JVM: No such file or directory (2) wrapper | JVM exited while loading the application. jvm 5 | wrapper | Unable to start JVM: No such file or directory (2) wrapper | There were 5 failed launches in a row, each lasting less than 300 seconds. Giving up. wrapper | There may be a configuration problem: please check the logs. wrapper | <-- Wrapper Stopped
wrapper配置文件中沒有指定jdk的安裝路徑,修改之。
wrapper.java.command=/usr/jdk1.7.0_67/bin/
繼續報錯:
wrapper | --> Wrapper Started as Daemon wrapper | Launching a JVM... wrapper | Unable to start JVM: Permission denied (13) wrapper | JVM exited while loading the application. wrapper | Reloading Wrapper configuration... wrapper | Launching a JVM... wrapper | Unable to start JVM: Permission denied (13) wrapper | JVM exited while loading the application. jvm 2 | wrapper | Unable to start JVM: Permission denied (13) wrapper | Reloading Wrapper configuration... wrapper | Launching a JVM... wrapper | Unable to start JVM: Permission denied (13) wrapper | JVM exited while loading the application. jvm 3 | wrapper | Unable to start JVM: Permission denied (13) wrapper | Reloading Wrapper configuration... wrapper | Launching a JVM... wrapper | Unable to start JVM: Permission denied (13) wrapper | JVM exited while loading the application. jvm 4 | wrapper | Unable to start JVM: Permission denied (13) wrapper | Reloading Wrapper configuration... wrapper | Launching a JVM... wrapper | Unable to start JVM: Permission denied (13) wrapper | JVM exited while loading the application. jvm 5 | wrapper | Unable to start JVM: Permission denied (13) wrapper | There were 5 failed launches in a row, each lasting less than 300 seconds. Giving up. wrapper | There may be a configuration problem: please check the logs. wrapper | <-- Wrapper Stopped
wrapper配置文件中指定java絕對路徑,而不是jdk的bin路徑。。。修改之。
wrapper.java.command=/usr/jdk1.7.0_67/bin/java
這次ok了。
訪問nexus:
http://192.168.31.123:8088/nexus/