【问题标题】:maven package JDO dependencies with shade jarmaven 使用 shade jar 打包 JDO 依赖项
【发布时间】:2013-01-15 01:33:18
【问题描述】:

我正在尝试打包一个由我的代码 + 依赖项组成的阴影 jar。我能够很好地打包所有内容,但是由于我使用的是 DataNucleus(datanucleus-core、datanucleus-api-jdo、datanucleus-rdbms),因此它们的 plugin.xml 位于其根目录中。我尝试使用带有阴影的 XmlAppendingTransformer,但由于这些 xml 的根元素只是 <plugin>,因此转换器将所有 <extension> 元素合并为一个巨大的 <plugin> 标签,并且在运行时 DataNucleus 类加载器无法找到正确的插件。所以我的问题是:

1) 将所有依赖项打包到 1 个 jar 中是一个好习惯吗?或者我应该将依赖项复制到一个文件夹中并在运行时将该文件夹包含在类路径中?

2) 如果我想用我的jar 打包DataNucleus,如何处理多个plugin.xml 的?我尝试将它们放在 <plugins> 根标签中,但这也不起作用。它们必须在根文件夹中吗?我可以在阴影过程中将它们移动到不同的文件夹吗?

【问题讨论】:

    标签: maven datanucleus maven-shade-plugin


    【解决方案1】:

    所有 plugin.xml(Eclipse OSGi 插件)都必须位于 CLASSPATH 的根目录中,因此您必须合并它们。同样,您需要合并 META-INF/MANIFEST.MF(OSGi 元数据)的内容。

    好的做法?我不会争论任何一种方式。做适合您的环境和项目的事情。

    如果您找到一种可靠地合并它们的方法,请告诉我们,以便可以将其放入 DN 文档中,以造福那些想要做这种事情的人。其他人之前尝试过,stackoverflow IIRC上的一些帖子

    【讨论】:

    • 好吧...我刚刚从阴影中排除了 org.datanucleus:* jars。其余部分为阴影。对于启动命令的类路径中额外的几个 jar 来说,这没什么大不了的,但是当你的类路径中有 50 个 jar 时,它看起来很糟糕。这是唯一的原因。有些人更喜欢将所有罐子合二为一。我自己更喜欢它,但我相信这是品味问题。 :)
    猜你喜欢
    • 2014-05-02
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 2011-04-03
    • 2020-05-08
    • 2010-12-16
    相关资源
    最近更新 更多