解決m2eclipse 0.9.7版本下maven Assembly plugin無法工作的問題

升級到m2eclipse 0.9.7版本後,發現一個問題,maven Assembly plugin無法工作,具體是在eclipse下執行"run as" --> "maven package"時,報錯:

(我在pom.xml中重定義了package的行爲,會執行maven-assembly-plugin插件)

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->[ERROR] BUILD ERROR
[INFO] 
------------------------------------------------------------------------
[INFO] Failed to create assembly: Error adding file 
' net.runafter.nptt:NpttCore:jar:0.1.0 '  to archive:

G:\workspace\
private \tools\nptt\trunk\NpttCore\target\classes isn ' t a file.



如果在windows命令行下直接執行mvn package,繞過eclipse和m2eclipse,就可以成功。
window -> preferences -> maven, 勾選"Debug output" 打開maven的debug開關,細看錯誤日誌:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
[DEBUG] Adding artifact: net.runafter.nptt:NpttCore:jar:
0.1 . 0  with file:

G:\workspace\
private \tools\nptt\trunk\NpttCore\target\classes to assembly location: lib / NpttCore - 0.1 . 0 .jar.
[DEBUG] Adding file: G:\workspace\
private \tools\nptt\trunk\NpttCore\target\classes to archive location: NpttMain -

0.1 . 0 / lib / NpttCore - 0.1 . 0 .jar
[INFO] 
------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] 
------------------------------------------------------------------------
[INFO] Failed to create assembly: Error adding file 
' net.runafter.nptt:NpttCore:jar:0.1.0 '  to archive:

G:\workspace\
private \tools\nptt\trunk\NpttCore\target\classes isn ' t a file.

[INFO] 
------------------------------------------------------------------------
[DEBUG] Trace
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to create assembly: Error adding file

' net.runafter.nptt:NpttCore:jar:0.1.0 '  to archive: G:\workspace\ private \tools\nptt\trunk\NpttCore\target\classes

isn
' t a file.
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java: 584 )
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle

(DefaultLifecycleExecutor.java:
500 )
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:
479 )
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures

(DefaultLifecycleExecutor.java:
331 )
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments

(DefaultLifecycleExecutor.java:
292 )
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:
142 )
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:
336 )
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:
129 )
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:
301 )
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39 )
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25 )
    at java.lang.reflect.Method.invoke(Method.java:
597 )
    at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:
315 )
    at org.codehaus.classworlds.Launcher.launch(Launcher.java:
255 )
    at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:
430 )
    at org.codehaus.classworlds.Launcher.main(Launcher.java:
375 )
Caused by: org.apache.maven.plugin.MojoExecutionException: Failed to create assembly: Error adding file

' net.runafter.nptt:NpttCore:jar:0.1.0 '  to archive: G:\workspace\ private \tools\nptt\trunk\NpttCore\target\classes

isn
' t a file.
    at org.apache.maven.plugin.assembly.mojos.AbstractAssemblyMojo.execute(AbstractAssemblyMojo.java: 368 )
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:
453 )
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:
559 )
      
16  more
Caused by: org.apache.maven.plugin.assembly.archive.ArchiveCreationException: Error adding file

' net.runafter.nptt:NpttCore:jar:0.1.0 '  to archive: G:\workspace\ private \tools\nptt\trunk\NpttCore\target\classes

isn
' t a file.
    at org.apache.maven.plugin.assembly.archive.task.AddArtifactTask.execute(AddArtifactTask.java: 193 )
    at org.apache.maven.plugin.assembly.archive.task.AddDependencySetsTask.addDependencySet

(AddDependencySetsTask.java:
177 )
    at org.apache.maven.plugin.assembly.archive.task.AddDependencySetsTask.execute

(AddDependencySetsTask.java:
116 )
    at org.apache.maven.plugin.assembly.archive.phase.DependencySetAssemblyPhase.execute

(DependencySetAssemblyPhase.java:
74 )
    at org.apache.maven.plugin.assembly.archive.DefaultAssemblyArchiver.createArchive

(DefaultAssemblyArchiver.java:
129 )
    at org.apache.maven.plugin.assembly.mojos.AbstractAssemblyMojo.execute(AbstractAssemblyMojo.java:
322 )
      
18  more
Caused by: org.codehaus.plexus.archiver.ArchiverException:

G:\workspace\
private \tools\nptt\trunk\NpttCore\target\classes isn ' t a file.
    at org.codehaus.plexus.archiver.AbstractArchiver.addFile(AbstractArchiver.java: 308 )
    at org.codehaus.plexus.archiver.AbstractArchiver.addFile(AbstractArchiver.java:
262 )
    at org.apache.maven.plugin.assembly.archive.archiver.AssemblyProxyArchiver.addFile

(AssemblyProxyArchiver.java:
474 )
    at org.apache.maven.plugin.assembly.archive.task.AddArtifactTask.execute(AddArtifactTask.java:
188 )
      
23  more



    可以看到,maven Assembly plugin試圖以操作文件的方式操作目錄NpttCore\target\classes,因此失敗造成整個package命令執行失敗。

    查了好一段時間,沒有結果,因爲之前一直都是ok的,而且在命令行下可以正常,有些糊塗。最後沒有辦法了,只好google,終於有所收穫,同樣的問題之前有人遇到過:

    http://jira.codehaus.org/browse/MNGECLIPSE-1201

    而且給maven的官方提過comments:
    http://jira.codehaus.org/browse/MASSEMBLY-396

    似乎maven的維護人員給出了答案:

    This is related to workspace resolution feature that is enabled automatically if project has workspace resolution enabled. You can disable it in the Maven launch configuration.

    The workspace resolution is not a new feature, you can read about it at [1]. In 0.9.7 defaults for the Maven launch configuration been changed to pickup setting for workspace dependency resolution from the project settings, so defaults for compile-time dependency resolution match Maven launch dependency resolution. Unfortunately not all Maven plugins can properly work when workspace dependency resolution is enabled, so I would recommend to submit bug reports to the Maven projects for such plugins.

    The m2eclipse allows to disable workspace resolution for compile time and for Maven launch config separately, so you have some flexibility.

    簡單的說就是和workspace resolution這個特性有關,In 0.9.7默認的maven的啓動配置已經被修改爲“pickup setting for workspace dependency resolution from the project settings”,而不是所有的maven插件都可以在workspace dependency resolution開啓的情況下工作。比如這次maven Assembly plugin就犯錯了,可以通過在maven的啓動配置中關閉這個特性來解決這個問題。

    解決的方法很簡單,右鍵單擊要執行package的project,"properties for ***" -> maven,將"resolve dependencies from workspace projects"前的勾取消。

    重新執行maven package成功,問題解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章