部署maven的一些要點(diǎn)、遇到的問題和心得體會(huì) (圖片看不了,可以下載doc文件) 一、 maven環(huán)境的搭建 1、 下載并配置maven(可做可不做) (1)到http://maven.下載maven的最新版本,并解壓到某一目錄(假設(shè)是d:\apache-maven);
(2)配置系統(tǒng)環(huán)境變量:PATH里面加上d:\apache-maven\bin (3)配置JAVA_HOME到jdk目錄 (4)在命令行上輸入 : mvn -version; 回車,如看到下面信息表示安裝成功:
(5)在命令行上輸入 : mvn help:system; 回車,會(huì)在當(dāng)前用戶目錄下(win7是C:\Users\用戶名,xp是c:\documents and settings\用戶名),建立.m2目錄。
2、 Eclipse集成maven Update site是http://m2eclipse./sites/m2e,全選安裝就好了,重啟eclipse. 這樣就安裝了eclipse集成的maven插件,但建議使用在第一步下載maven,做法如下:進(jìn)入Preferences——》maven——》Installations,點(diǎn)擊“Add”添加maven的解壓路徑。
3、建立settings.xml文件 如果沒有做第一部操作,需要自己在當(dāng)前用戶目錄下建立.m2目錄。之后在.m2目錄下建立setting.xml文件.注意: 《maven基本使用指南_小飛俠版1.doc》這個(gè)文檔的配置是錯(cuò)誤的,mvn install時(shí)會(huì)提示:連接不了180.200.3.76:8081的錯(cuò)誤。是76服務(wù)器的maven私服沒有建好的原因。 以下是我的配置,這里需要建立一個(gè)私服,在第四點(diǎn)介紹倉庫時(shí)會(huì)介紹。 <settings xmlns="http://maven./SETTINGS/1.0.0" xmlns:xsi="http://www./2001/XMLSchema-instance" xsi:schemaLocation="http://maven./SETTINGS/1.0.0 http://maven./xsd/settings-1.0.0.xsd"> <localRepository>F:\maven</localRepository> <profiles> <profile> <id>dev</id> <repositories> <repository> <id>releases</id> <url>http://localhost:8888/nexus-2.0.3/content/repositories/releases</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> <repository> <id>central</id> <name>Central</name> <url>http://localhost:8888/nexus-2.0.3/content/repositories/central/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles> </settings> 其中下面標(biāo)注為紅色的,需要修改為自己的一個(gè)本地目錄,以后所有的jar包都會(huì)放在這個(gè)下面. 我們將項(xiàng)目所需要用到除源代碼之外的東西(如jar包,tomcat,script等都放在上面)通過這個(gè)文件,MAVEN會(huì)從服務(wù)器會(huì)拉取jar包到本地,如果服務(wù)器上的包有更新,也會(huì)自動(dòng)去更新,這樣,當(dāng)框架有新的版本出現(xiàn)時(shí),不再需要我們手動(dòng)去重新添加jar包這么麻煩。
二、網(wǎng)廳環(huán)境的搭建(我配置的是南昌網(wǎng)廳,遇到錯(cuò)誤沒有成功運(yùn)行) 1、 檢出entity、base為java project ,biz為ejb project ,web為動(dòng)態(tài)網(wǎng)頁工程,script為javascript project。都有紅叉叉,沒事,繼續(xù)下面的步驟后就好了。 2、 檢出完成后對(duì)每個(gè)工程進(jìn)行添加maven-enable依賴管理。 選中項(xiàng)目右鍵“Maven—》Enable Depandency management”,彈出以下界面:
這里需要設(shè)置maven的坐標(biāo),可以參考第四點(diǎn)的坐標(biāo)。Group ID使用com.maywide.ibh,artifact Id是構(gòu)件的id,設(shè)置為項(xiàng)目的名稱,version不用管。Packaging除了web project用war外,其他選jar。 3、 依賴管理。打開項(xiàng)目的pom.xml文件添加依賴項(xiàng)。如biz_nanchang的依賴配置如下: <dependencies> <dependency> <groupId>com.maywide.ibh</groupId> <artifactId>base</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.maywide.ibh</groupId> <artifactId>entity</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.maywide.ibh</groupId> <artifactId>lib95</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>com.maywide.ibh</groupId> <artifactId>lib96</artifactId> <version>1.0</version> </dependency> 添加了對(duì)base、entity項(xiàng)目的依賴。其中lib95、lib96是privatelib的jar包。我上傳到私服時(shí)把它命名成這樣了。Base、entity項(xiàng)目也需要添加對(duì)lib的依賴項(xiàng),在私服需要一個(gè)個(gè)jar包上傳,所以需要一個(gè)個(gè)的添加依賴,lib有94個(gè)jar吧,慢慢加唄。因?yàn)?span style="font-family: Calibri;">maven的依賴具有傳遞性的,所以biz_nanchang項(xiàng)目不需要添加對(duì)lib的jar包的依賴。同理,web_nanchang項(xiàng)目只需要添加對(duì)biz_nanchang的依賴就可以了。 之后選擇mvn install編譯。 3、把biz_nanchang和web_nanchang項(xiàng)目的jdk改成1.6。進(jìn)行maven下的操作時(shí)經(jīng)常會(huì)把jdk給成1.5的,要檢查一下。
4、添加maven的依賴庫到Web Deployment Assembly。網(wǎng)上說要這樣做的,防止找不到jar包,不過這一步我沒體現(xiàn)到它的用處。
5、Web工程右鍵->Run as->Maven build,這時(shí)會(huì)跳出一個(gè)頁面:如圖:
在goals輸入:tomcat:run-war,
在VM參數(shù):添加 -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n 點(diǎn)擊Apply,之后run就可以執(zhí)行了。但期間遇到錯(cuò)誤2、錯(cuò)誤3和錯(cuò)誤4。錯(cuò)誤4沒有解決導(dǎo)致網(wǎng)站無法運(yùn)行。
三、我掌握的maven的一下知識(shí)點(diǎn)。 1、坐標(biāo) Maven把項(xiàng)目作為構(gòu)件,每個(gè)構(gòu)件定義一個(gè)坐標(biāo),由于區(qū)分其他的構(gòu)件,配置依賴時(shí)只需加入這個(gè)坐標(biāo),maven會(huì)先到本地倉庫查找該構(gòu)件,找不到就到遠(yuǎn)程倉庫查找。 坐標(biāo)如下: GroupId:定義當(dāng)前maven項(xiàng)目所屬的實(shí)際項(xiàng)目。例如網(wǎng)廳項(xiàng)目使用com.maywide.ibh。 ArtifactID:構(gòu)件的ID,一個(gè)project、模塊的id。 Version:版本號(hào)。 Packaging:打包的方式。默認(rèn)是jar。Web project需要選擇war。
2、maven的依賴在<dependency>標(biāo)簽里設(shè)置,需輸入構(gòu)件的坐標(biāo)。Maven是傳遞依賴的。 3、倉庫 倉庫是存儲(chǔ)構(gòu)件的地方。Maven有本地倉庫和遠(yuǎn)程倉庫之分。 (1)本地倉庫 在setting.xml的<localRepository>F:\maven</localRepository>里面配置本地倉庫的位置 ,項(xiàng)目所需的構(gòu)件會(huì)被下載到該目錄。如網(wǎng)廳項(xiàng)目,我們可以打開該目錄F:\maven,可以進(jìn)入com文件夾—》maywinde文件夾—》ibh文件夾,看到我們的base、entity、biz等項(xiàng)目。 (2)遠(yuǎn)程倉庫 遠(yuǎn)程倉庫分為中央倉庫和私服。 中央倉庫是全世界共享的一下常見的構(gòu)件。 私服是一家公司、企業(yè)自己建的用于存儲(chǔ)構(gòu)件的的一個(gè)maven服務(wù)器,還有它也起到代理中央倉庫的作用。目前最多人使用的是用nexus搭建maven私服。
私服的倉庫分成4類:group(倉庫組)、hosted(宿主)、proxy(代理)和虛擬(virtual)。Nexus默認(rèn)已經(jīng)有中央倉庫的代理了。只需把下面提供的url配置到setting.xml文件了。
我們要使用到的是宿主倉庫,用于存放項(xiàng)目的jar包。Maven提供Releases倉庫用于存放發(fā)布版本的構(gòu)件;Snapshots存放快照版本的構(gòu)件;3rd party存放第三方構(gòu)件。 選擇一個(gè)倉庫,可以進(jìn)入以下界面上傳構(gòu)件:
四、遇到的問題和解決 錯(cuò)誤1 : [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependencies for project biz_zhuhai:biz_zhuhai:jar:0.0.1-SNAPSHOT: Failed to collect dependencies for [com.maywide.ibh:lib345:pom:1.0 (compile)]: Failed to read artifact descriptor for com.maywide.ibh:lib345:pom:1.0: Could not transfer artifact com.maywide.ibh:lib345:pom:1.0 from/to releases (http://localhost:9888/nexus-2.0.3/content/repositories/releases): Connection to http://localhost:9888 refused: Connection refused: connect -> [Help 1] 解決:這是配置的url有錯(cuò)誤或者是私服沒有配好,導(dǎo)致構(gòu)件下載時(shí)出錯(cuò)。如果沒有jar包需要在私服里下載,可以不配置私服的,也就是可以把setting.xml的profiles里的東西全部刪除的。
錯(cuò)誤2:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.10:test (default-test) on project web_nanchang: There are test failures. [ERROR] [ERROR] Please refer to E:\maven\web_nanchang\target\surefire-reports for the individual test results.
解決:這是因?yàn)闇y(cè)試代碼時(shí)遇到錯(cuò)誤,它會(huì)停止編譯。只需要在pom.xml的<project>里添加以下配置,使得測(cè)試出錯(cuò)不影響項(xiàng)目的編譯。 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <testFailureIgnore>true</testFailureIgnore> </configuration> </plugin> </plugins> </build>
錯(cuò)誤3: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project web_nanchang: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: 解決:maven的web項(xiàng)目默認(rèn)的webroot是在src\main\webapp。如果在此目錄下找不到web.xml就拋出以上的異常。解決方法在pom.xml加入以下的配置。紅色背景字體改成你網(wǎng)站的根目錄。 <build>
錯(cuò)誤4: 嚴(yán)重: The web application [/web_nanchang] registered the JBDC driver [org.hsqldb.jdbc.JDBCDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 2012-4-27 10:36:49 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 嚴(yán)重: The web application [/web_nanchang] registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 還不知道怎樣解決,導(dǎo)致運(yùn)行不了。 錯(cuò)誤5:
這個(gè)感覺怪怪的,遇過幾次。把java complier改成1.6或者disabled dependency manangent后在enable它,搞著搞著就消失了。
五、心得體會(huì): 這次maven的部署用了一個(gè)多星期。起初對(duì)maven不了解,按著小飛俠的文檔來部署,但那個(gè)文檔是boss2的,而我配的是網(wǎng)廳項(xiàng)目,部署不成功又不知道什么原因。所以我覺得用boss2的配置文檔去配置網(wǎng)廳的,應(yīng)該先弄清楚每一步是什么意思。就比如boss2的項(xiàng)目為什么不需要檢出lib和privatelib呢,是因?yàn)樗椒镆呀?jīng)有了jar包,而網(wǎng)廳的沒有,所以不理解地按著文檔搞是白搞的。 之后我上網(wǎng)找資料,還買了本書,去學(xué)習(xí)maven。結(jié)果學(xué)習(xí)了一些maven的知識(shí),知道怎樣配私服,還按書本部署了幾個(gè)簡(jiǎn)單的項(xiàng)目。但當(dāng)用到網(wǎng)廳的時(shí)候出現(xiàn)一些奇怪的錯(cuò)誤,上網(wǎng)找答案,嘗試了多種方法解決了一些錯(cuò)誤。我覺得一個(gè)部署項(xiàng)目好郁悶啊,如果有個(gè)人請(qǐng)教一下或者討論一下,會(huì)很高效。 |
|