我必须对旧的基于Java的项目进行一些修改,该项目在项目树中包含依赖的JAR文件。 3年前,当我上次参与这个项目的时候,我在Eclipse中开发它并使用Eclipse的File -> Export...
函数生成可运行的JAR文件,该函数运行良好。
当我再次开始研究这个项目时,我转而使用IDEA。在线文档之后,我能够使用IDEA的Project Structure -> Artifacts
窗格创建一个可运行的jar。
但是,在尝试使用JAR文件时遇到了几个问题IDEA生成我在使用Eclipse生成的文件时没遇到过:
如果我尝试将依赖JAR直接提取到我的可运行JAR中,我会得到Java security exceptions about invalid signature files,因为我的依赖JAR中的RSA / SF清单文件被提取出来。
如果我尝试在我生成的JAR文件中嵌入依赖JAR而不是从它们中提取类文件,我遇到了“class not found”异常。
为了理解发生了什么,我尝试使用Eclipse生成JAR文件,就像我之前做的那样,效果很好。差异似乎是IDEA正在打包存储在我的项目树中的清单文件中,如下所示:
Manifest-Version: 1.0
Class-Path: .
Main-Class: com.<company>.main.Main
相比之下,Eclipse在导出过程中生成了清单文件,如下所示:
Manifest-Version: 1.0
Class-Path: .
Main-Class: com.<company>.main.Main
Name: com/jgoodies/forms/layout/FormLayout$LayoutInfo.class
SHA1-Digest: J6yu1IuQZO0rgeF7Enl4p7u4ykU=
Name: com/jgoodies/forms/builder/ButtonBarBuilder.class
SHA1-Digest: 7ApcSFXKq2rw8IRkIl+R7y2rzIA=
Name: com/jgoodies/forms/layout/FormLayout$ComponentSizeCache.class
SHA1-Digest: cUMTPR0lwBEeQVUd3tsCFq6cMhA=
Name: com/jgoodies/forms/util/Utilities.class
SHA1-Digest: UbvvkJcHLyNbduyo07Hr2bSz06E=
...
它还从签名的从属JAR中排除了RSA / SF文件,这样在运行生成的JAR时我没有得到任何安全异常。
我的问题是:是否有可能让IDEA生成一个类似于Eclipse的清单文件?