我們都知道,在一個(gè)典型的Maven項(xiàng)目中,編譯后的class文件默認(rèn)是放在targert/classes目錄下的。但是我今天碰到一個(gè)比較奇怪的問題,在Eclipse中我通過import exsiting maven projects的方法,導(dǎo)入了2個(gè)maven的project,一個(gè)是非web project,另一個(gè)是web project。 在web project的target classes中,并沒有我們期望的Class文件,所以部署到Eclipse的tomcat中時(shí),在WEB-INF/classes中也沒有對應(yīng)的Class類??赡艿脑蛴腥缦露鄠€(gè)原因,希望大家可以對號入座:
1. 執(zhí)行maven的命令,mvn clean install -DskipTests可以編譯成功,在target/classes中可以看到相關(guān)的Class文件,但是如果在Project/Clean中clean相關(guān)的Project時(shí),還需要重新使用mvn clean install -DskipTests重新生成Class文件(target/classes會被刪除)
2. 執(zhí)行mvn eclipse:clean eclipse:eclipse命令,并刷新后可以看到該Maven的Project變成了一個(gè)真正的常規(guī)的java的web project(在Project的icon上后有一個(gè)小圓球),這時(shí),即使是使用Project/Clean后,也會在target/classes中重新自動生成Class類文件。(原因是一般的eclipse的項(xiàng)目空間有.project和.classpath兩個(gè)文件.執(zhí)行eclipse:eclipse就是讓maven的eclipse插件把.classpath內(nèi)的jar引用地址重新更新一遍. eclipse:clean就是刪除所有eclipse項(xiàng)目文件再用eclipse:eclipse重建。)
但是你可能會碰到一個(gè)更加嚴(yán)重的問題,就是在Eclipse的Tomcat的wtpwebapps目錄中不會有該web項(xiàng)目,換句話說,就是該項(xiàng)目不能被成功的部署到Eclipse的Tomcat中,這很有可能的原因是Deployment Assembly(程序部署集)或者是Project Facets屬性存在問題,參照該篇博文以解決怎樣設(shè)置Project Facets或者是Deployment Assembly,我碰到的問題是Deployment Assembly屬性不存在,當(dāng)我參照該博文(http://josh-persistence.iteye.com/admin/blogs/1926808)將Deployment Assembly配置成功后,部署也成功了。
另外除了上面我碰到的原因之外,實(shí)際開發(fā)中,你有還可能存在如下的原因:
在開始之前,查看Eclipse的problems view,里面可能會告訴相關(guān)的錯(cuò)誤的原因,一般來說,可能有如下幾種情況:
1). 確保 project->build automatically已經(jīng)被選上.
2). ?project->clean..->選第2個(gè)clean select project, 勾上start build immediatelly
3).刪除現(xiàn)在的項(xiàng)目, 重新導(dǎo)入源文件,設(shè)置eclipse為保存時(shí)編譯,然后在保存的時(shí)候就可以自動編譯了
4).如果項(xiàng)目里引了某個(gè)不用的jar包,而那個(gè)包又被你刪了,就會出現(xiàn)不報(bào)錯(cuò)但怎么也編譯不出來class文件的情況,可以把所有包都刪除,然后一個(gè)一個(gè)的再引入(需要的),不要一下子把所有包都引入來,沒用的可能會引起不良后果.
5). 想刪掉某個(gè)class文件重新生成,刪除class文件后,但classes目錄下的文件夾被其它程序打開,比如SublineText。此時(shí)編譯也不會通過,在problems下可能會提示“con''t delete classes ……”。關(guān)掉其它程序重新編譯即可。
6).remove掉 JRE System Library,重新導(dǎo)入即可編譯。
7).把build path中所有包都remove掉。然后又add jars,add libraries把需要的加進(jìn)去。
8).project->properties->java build path->source->.../WEB-INF/src的output folder不要默認(rèn),編輯讓它指向../WEB-INF/classes然后重新點(diǎn)擊build工程即可自動編譯。
9).如果你的項(xiàng)目是CVS進(jìn)行版本控制的項(xiàng)目,查看工程下面是否缺少了work目錄,由于CVS控制時(shí)不把work加如版本,所以 checkout后沒有這個(gè)目錄,要手工加上有的工程就能自動編譯了