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

mxr*_*xro 7 java eclipse m2eclipse maven maven-shade-plugin

使用 m2eclipse 工具在 Eclipse 中为为Maven Shade Plugin配置的项目运行 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)。都导致相同的错误。

解决方法:

此问题的解决方案提供了一种解决方法:该错误仅在选择该选项时发生Resolve Workspace Artifacts。如果未选择此选项,则构建运行良好。

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

小智 6

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

根据问题,阴影插件不适用于多阶段命令。该插件使用 jar 名称查找类而不是 jar 并失败。

希望这对某人有帮助。


Ste*_*han 4

构建启用工作空间分辨率的项目通常非常有用

我曾经也这么认为...显然,能够直接从当前工作区中的另一个项目构建项目非常有用。然而,我很快就进入了 Eclipse、m2eclipse 和 Maven 的噩梦。

一方面,Maven 应该在存储库(本地、中央......)中查找项目依赖项。另一方面,m2eclipse“引诱”Maven,使其相信位于 Eclipse 工作区中的项目是众所周知的 Maven 位置(即存储库)中的依赖项。

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

为了摆脱噩梦,我发现始终从存储库获取项目依赖项很有用。如果我的项目 A 依赖于工作区中的另一个项目 B,我只需将 B 安装在本地存储库中(右键单击项目 B,Run as> Maven install。仅此而已)。

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

  • 不再做噩梦
  • 不涉及 m2eclipse 魔法
  • 完全标准和传统的 Maven 方式受到尊重

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