maven-shade-plugin报告:创建阴影jar时出错:... target / classes(是一个目录)

时间:2016-06-21 11:03:00

标签: java eclipse maven m2eclipse maven-shade-plugin

使用m2eclipse工具为Maven Shade Plugin配置的项目在eclipse中运行Maven构建时,构建失败并显示以下错误消息:

Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:2.4.3:shade (default) on project xxx: Error creating shaded jar: /.../project/target/classes (Is a directory) -> [Help 1]

我尝试了不同版本的Shade插件,尝试使用不同的Java版本(6,7,8)。所有这些都会导致同样的错误。

解决方法:

this question的解决方案提供了一种解决方法:仅在选择了Resolve Workspace Artifacts选项时才会出现错误。如果未选择此选项,则构建运行正常。

(但是,这并不能解决问题,因为构建具有已启用工作区分辨率的项目通常非常有用。)

2 个答案:

答案 0 :(得分:2)

  

构建具有已启用工作区分辨率的项目

通常非常有用

我曾经认为相同......显然,能够从位于当前工作空间的另一个项目构建项目非常有用。但是,我很快就用Eclipse,m2eclipse和Maven进入了一场噩梦。

一方面,Maven应该在存储库(本地,中央......)中找到项目依赖项。另一方面,m2eclipse“诱惑”Maven让它相信位于Eclipse工作区的项目是一个着名的Maven地方(即存储库)的依赖。

这种m2eclipse魔法在某些情况下效果很好但在其他情况下...它只是明显失败(maven shade插件就是一个例子)。您是否还注意到默认情况下未激活选项Resolve Workspace Artifacts

为了逃避这个问题,我发现总是从存储库中获取项目依赖项很有用。如果我的项目A依赖于我工作区中的另一个项目B,我只需在本地存储库中安装B(右键单击项目B,Run as> Maven install。这就是全部。

我可以看到这种解决方法的三个优点:

  • 不再做恶梦
  • 没有参与m2eclipse魔术
  • 完全标准和传统的Maven方式荣幸

你可以把这种方法视为一个小自由的食客。如果您仍然想要使用漂亮的选项Resolve Workspace Artifacts,请向m2eclipse团队发送一个问题。不要忘记准备一个重现问题的示例项目。

答案 1 :(得分:1)

我找到了问题及其解决方案,如果您运行像 mvn这样的单相命令,则尝试在单个命令如 mvn clean install -X test 中执行多个阶段时,问题就开始了测试 MVN安装。阴影插件存在问题。这些是apache网站上的问题。 https://issues.apache.org/jira/browse/MSHADE-295https://issues.apache.org/jira/browse/MSHADE-215

根据问题,带阴影的插件无法与多阶段命令一起使用。插件使用jar的名称查找类而不是jar并失败。

希望这对某人有帮助。