栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

由Maven Shade插件构建的无效或损坏的JAR文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

由Maven Shade插件构建的无效或损坏的JAR文件

最后,如果我使用来构建您的项目,并向

pom.xml
您展示了
apache-poi
after
jfreechart
,则向我们展示了,那么正如您所提到的,我得到了一个损坏的JAR。交换这两个依赖关系的顺序确实可以为我提供正确的JAR。

我以前有一些关于的经验,

maven-shade-plugin
使用时遇到了创建的JAR
meta-INF
目录的麻烦,因此我检查了其中的缺陷。

我试图将目录复制(使用Total Commander)在

meta-INF
本地文件系统上的某个位置,并且我注意到在复制中的文件时出错
meta-INF/licences/
。如果我尝试将它们分别复制到某个地方并且可以工作,但无法复制整个内容。我的结论是JAR / ZIP存档已损坏。

我所做的是我 进入 在Total Commander是JAR(

Ctrl
+
PgDown
以上 的JAR文件),我 改名
thirdpartylicenses.txt
thirdpartylicenses.txt.wtf
。这样做,Total
Commander可以保存并重新打包JAR(我已经安装了Total7zip Total Commander Packer插件-
如果有人尝试过但不起作用,请尝试安装此插件)。

在这之后。有用。

(我也尝试过使用Cygwin的

unzip
/
zip
命令重新打包整个内容而不重命名任何内容,但这没用,新的存档仍然损坏。TotalCommander或我提到的插件确实起到了一定的作用。)

我猜这

maven-shade-plugin
仅仅是创建一个损坏或无效的ZIP /
JAR存档。我不确定为什么,也许我所描述的内容不适用于其他任何人,但我想我会提到它,以便也许我可以提供帮助。


我不能只留下这个,所以我更深入地研究了,我想我找到了答案。

JAR包含65608个词条。在 良好的 JAR包含65450个词条。

猜猜一个 普通
ZIP文件的条目数上限是多少?是的
Wiki文章谈到了克服此限制的ZIP64格式。

良好的
JAR少项,因为实际的依赖关系,因为在你的依赖声明的位置的改变

pom.xml

作为对Seanizer的commons-lang答案的反驳,如果您使用的是Google的Guava库(在许多方面,我认为它是commons-lang的“后继者”),则可以使用Joiner:

Joiner.on(" ").join(set_1);

借助一些辅助方法来执行以下操作:

Joiner.on(" ").skipNulls().join(set_1);// If 2nd item was null, would produce "1, 3"

要么

Joiner.on(" ").useForNull("<unknown>").join(set_1);// If 2nd item was null, would produce "1, <unknown>, 3"

它还支持直接附加到StringBuilders和Writers以及其他类似功能。

我已经数过像这样的条目。

Collections.list(new JarFile("...").entries()).size();

我使用的Java7似乎支持新的ZIP64格式,因此,如果有人尝试使用Java
5或6 来计算 不良 JAR中的条目,则会收到错误消息(不过我不确定)。

我还试图运行JAR 爆炸 。我已经将整个JAR解压缩到一个目录中,然后像这样运行整个程序。

java -cp <dir/ com.mycompany.test.Start

像魅力一样工作。


底线。不要 过度使用

maven-shade-plugin

我有一个正在工作的项目,在那里我要像这样构建我的项目。

  • 我使用复制我项目的依赖项
    maven-dependency-plugin
    。签出
    copy-dependencies
    目标。
    target/dependency
    如果我没记错的话,这会将您的依赖项复制到其中。
  • 使用
    maven-jar-plugin
    I 在插件配置中使用这些选项将这些依赖项
    MANIFEST.MF
    作为
    Class-Path
    条目添加到最终的JAR 中。
        <classpathPrefix>dependency/</classpathPrefix>          <addClasspath>true</addClasspath>

因此,我将

Class-Path
输入
dependency/<artifactId>-<version>.jar
,等。

  • After this I’m using the
    maven-assembly-plugin
    to create a distribution ZIP which contains my final JAR and the whole
    dependency/
    folder.
  • When I deploy my application I can run it like
    java -jar final.jar
    .

Primarily I’ve opted to use this solution, because in my project I use some
Bouncy Castle JARs which JARs have some extravagant this and that inside
their

meta-INF
directory. When I used the
maven-shade-plugin
to create my
final runnable JAR all hell broke loose and I got nasty that method couldn’t
be found and this signature is not quite right
errors.

You should be doing something like this also. This Maven shade business is too
shady to be useful (pun intended).


Here’s a blog post on the whole process that I’ve tried to
describe just above (thanks to
baba), maybe it’ll help someone
in the future.



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/440407.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号