1. 程式人生 > >eclipse中maven的run as打war包失敗的問題

eclipse中maven的run as打war包失敗的問題

場景一:
由於某些原因,有的時候需要暫時在斷網的情況下,或者更標準的說,是在連不上公司的maven公有倉庫的情況下打包。
很長一段時間,我打包都是在eclipse中用run as線上打包,直到前不久一次連不上公有倉庫時打包出錯,具體的錯誤因為某些原因,暫時無法重現,也就無法截圖。
後來我的解決辦法是,在maven的settings.xml檔案中加入離線配置,如下圖的
這裡寫圖片描述

<offline>true</offline>

這個配置預設是沒有的,沒有的情況下預設是fasle.
為了驗證更改有效,我特意拔去了網線打包,結果果然成功。
但是有些鬱悶的是,我無法斷定是否是eclipse的問題,就如上圖一樣,我再把這個配置註釋掉以後,再次打包卻也開始屢屢成功,因此本想把之前的錯誤截個圖都無法實現。
但可以肯定的是,當我沒有更改這個配置之前,凡離線打包,屢試屢敗,自從改過以後,雖然又註釋了,但是再離線打包,都是屢試屢成。
因此,如果有人遇到這種需要離線打包卻又不成功的情況,可以嘗試一下這個方法,或許也就成功了。

場景二:
最近我的eclipse出了很多毛病,重灌了多次依舊沒有解決這些問題,例如編譯突然變得特別慢,常常在更改程式碼以後重啟tomcat不再自動編譯(有配置的情況下),還有就是很多專案依賴的jar包,maven不會自動載入,導致需要force update。
也正是因為這個問題,導致我打包過程中報錯如下:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project pbossvisual: Compilation failure: Compilation failure:
[ERROR] /D:/eclipseWorkspace1/pbossvisual1/src/main/java/com
/cmsz/pbossvisual/alarmset/model/AlarmData.java:[1,1] 非法字元: \65279 [ERROR] /D:/eclipseWorkspace1/pbossvisual1/src/main/java/com/cmsz/pbossvisual/alarmset/model/AlarmData.java:[1,10] 需要class, interface或enum [ERROR] -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache
.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project pbossvisual: Compilation failure at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:355) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:216) at org.apache.maven.cli.MavenCli.main(MavenCli.java:160) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:858) at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) ... 19 more [ERROR] [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

對於這個錯,我一開始也有點丈二和尚摸不著頭腦,但是查了若干資料後,再在eclipse中亂點了一通後終於發現問題所在。
我發現,正常情況下右鍵專案的build path,會是如下圖所示:
這裡寫圖片描述
而這種打包失敗的情況下,build path開啟後確實如下圖所示:
這裡寫圖片描述
可以看出圖2比圖1少了一行,而正是這一行導致打包失敗。
因為少了這一行,maven打包時就無法找到相應的依賴包,從而出現瞭如上所示的錯誤,於是我手動add,如下圖:
這裡寫圖片描述

這裡寫圖片描述
之後再次打包便沒有了之前的問題,經過幾次嘗試,結果都是和料想一樣,若有人遇到類似的情況,也不妨一試。