天天看點

記錄maven java.lang.String cannot be cast to XX error

在項目開發中自定義了一個maven plugin,在本地能夠很好的工作,但是在ci server上卻無法正常工作報錯為:

<code>-----------------------------------------------------</code>

<code> </code> 

<code>         </code><code>at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:</code><code>225</code><code>)</code>

<code>         </code><code>at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:</code><code>153</code><code>)</code>

<code>         </code><code>at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:</code><code>145</code><code>)</code>

<code>         </code><code>at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:</code><code>84</code><code>)</code>

<code>         </code><code>at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:</code><code>59</code><code>)</code>

<code>         </code><code>at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:</code><code>183</code><code>)</code>

<code>         </code><code>at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:</code><code>161</code><code>)</code>

<code>         </code><code>at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:</code><code>319</code><code>)</code>

<code>         </code><code>at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:</code><code>156</code><code>)</code>

<code>         </code><code>at org.jvnet.hudson.maven3.launcher.Maven3Launcher.main(Maven3Launcher.java:</code><code>79</code><code>)</code>

<code>         </code><code>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)</code>

<code>         </code><code>at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:</code><code>57</code><code>)</code>

<code>         </code><code>at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:</code><code>43</code><code>)</code>

<code>         </code><code>at java.lang.reflect.Method.invoke(Method.java:</code><code>601</code><code>)</code>

<code>         </code><code>at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:</code><code>329</code><code>)</code>

<code>         </code><code>at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:</code><code>239</code><code>)</code>

<code>         </code><code>at org.jvnet.hudson.maven3.agent.Maven3Main.launch(Maven3Main.java:</code><code>146</code><code>)</code>

<code>         </code><code>at hudson.maven.Maven3Builder.call(Maven3Builder.java:</code><code>127</code><code>)</code>

<code>         </code><code>at hudson.maven.Maven3Builder.call(Maven3Builder.java:</code><code>74</code><code>)</code>

<code>         </code><code>at hudson.remoting.UserRequest.perform(UserRequest.java:</code><code>118</code><code>)</code>

<code>         </code><code>at hudson.remoting.UserRequest.perform(UserRequest.java:</code><code>48</code><code>)</code>

<code>         </code><code>at hudson.remoting.Request$</code><code>2</code><code>.run(Request.java:</code><code>326</code><code>)</code>

<code>         </code><code>at hudson.remoting.InterceptingExecutorService$</code><code>1</code><code>.call(InterceptingExecutorService.java:</code><code>72</code><code>)</code>

<code>         </code><code>at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:</code><code>334</code><code>)</code>

<code>         </code><code>at java.util.concurrent.FutureTask.run(FutureTask.java:</code><code>166</code><code>)</code>

<code>         </code><code>at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:</code><code>1110</code><code>)</code>

<code>         </code><code>at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:</code><code>603</code><code>)</code>

<code>         </code><code>at java.lang.Thread.run(Thread.java:</code><code>722</code><code>)</code>

<code>Caused by: org.apache.maven.plugin.PluginExecutionException: A type incompatibility occured</code><code>while</code> <code>executing [group id]:[artifact id]:[version]:start: java.lang.String cannot be cast to java.io.File</code>

  

      在花費了我大半的時間,将本地環境的maven,jdk等設為和ci一緻後最後定位到maven的版本問題,其終究原因是因為maven在3.0.3才支援配置參數為泛型集合(List&lt;T&gt;,Set&lt;T&gt;...),在3.0.2及一下本班不支援此寫法。

     修改次error的方法有兩種:

将ci Server的maven更新到3.0.3以上。(但是在我們的ci server更新有些困難,還有本人認為如果寫一個plugin隻能工作的固定version,這和一個廢物差不多,是以選擇了第二種方法)。

将泛型集合List&lt;T&gt;改為Array T[]。(項目中某大神寫的List&lt;File&gt;我輕易的改為File[].在執行前改為Arrays.asList(XXX));

     一切搞定。在此記錄希望對于遇見同類問題的人有所幫助。

本文轉自破狼部落格園部落格,原文連結:http://www.cnblogs.com/whitewolf/p/3313515.html,如需轉載請自行聯系原作者