我们正在尝试与 Leiningen 一起构建我们的 Clojure 项目。我们通过执行以下操作成功创建了 uberjar:
前提条件:
- project.clj 文件列出了依赖项
-
:main my-project.core
在项目.clj中
- core.clj 文件带有
-main
功能
-
(:gen-class :main true)
在 core.clj 中
程序:
- ran
lein test
;无故障完成
- ran
lein deps
;成功完成
- 来自project.clj的目录:rain
lein uberjar
- 这创建了两个 jar 文件:My-Project-1.0.0-SNAPSHOT-standalone.jar 和 My-Project-1.0.0-SNAPSHOT.jar。
- ran
java -jar BioClojure-1.0.0-SNAPSHOT-standalone.jar
,这导致了这个异常:
线程“main”中出现异常 java.lang.SecurityException:Manifest 主要属性的签名文件摘要无效
我对这个问题的研究并没有取得成果。显然 https://github.com/technomancy/leiningen/issues/31,这是一个已知问题,没有好的解决方案。我不明白那里的答案。
我们需要做什么才能让我们的 uberjar 工作?
- 确定我们的哪个依赖项导致了问题?
- 从我们的项目中删除依赖项?
- 以其他方式编译项目?
- 补丁莱宁根?
- 使用建议的命令:
zip *-standalone.jar -d META-INF/DUMMY.SF
(我不知道这是做什么的)
- 做某事
:uberjar-exclusions
在project.clj 文件中? (如果是这样,什么?)
Lein 和 java 版本:
$ lein version
Leiningen 1.6.1 on Java 1.6.0_26 Java HotSpot(TM) 64-Bit Server VM
更新:运行建议的命令给出:
$ unzip -l BioClojure-1.0.0-SNAPSHOT-standalone.jar | grep -i -e "\.sf"
49911 08-27-09 15:57 META-INF/RCSB-PDB.SF
0 03-23-10 08:21 META-INF/maven/net.sf.alxa/
0 03-23-10 08:21 META-INF/maven/net.sf.alxa/jlatexmath/
929 03-23-10 08:20 META-INF/maven/net.sf.alxa/jlatexmath/pom.xml
115 03-21-10 14:01 META-INF/maven/net.sf.alxa/jlatexmath/pom.properties
175241 08-17-11 20:25 META-INF/SELFSIGN.SF
0 09-21-09 06:45 META-INF/maven/net.sf.opencsv/
0 09-21-09 06:45 META-INF/maven/net.sf.opencsv/opencsv/
5510 09-21-09 06:44 META-INF/maven/net.sf.opencsv/opencsv/pom.xml
106 09-21-09 06:45 META-INF/maven/net.sf.opencsv/opencsv/pom.properties
通过阅读该问题中的评论,我的理解是,如果您将以下内容添加到您的中,您的问题就会消失project.clj
:uberjar-exclusions [#"foo.sf"]
where foo.sf
是您想要从 jar 中忽略的特定 .sf 文件。您可以通过运行来确定这一点:
unzip -l BioClojure-1.0.0-SNAPSHOT-standalone.jar | grep -i -e "\.sf"
建议的zip
命令从 jar 中删除特定文件(ZIP 格式)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)