如何像在 Eclipse 中一样在 IntelliJ 中创建可运行的 JAR
Posted
技术标签:
【中文标题】如何像在 Eclipse 中一样在 IntelliJ 中创建可运行的 JAR【英文标题】:How do I create a runnable JAR in IntelliJ as I would in Eclipse 【发布时间】:2017-06-04 09:51:51 【问题描述】:我使用 Eclipse 从包含许多库的项目创建可运行 JAR 的过程是。
导出 > 可运行 JAR > 选择启动配置 > 将所需库打包到生成的 JAR > 完成
这会在我的导出目标中创建一个 JAR,我 FTP 到我的服务器并运行良好。
我最近出于各种原因切换到 IntelliJ,除了构建我的 JAR 迫使我暂时回到 eclipse 之外,它在所有情况下都得到了改进。
使用 IntelliJ I:
打开项目结构 > 工件并从具有依赖关系的模块创建一个新的 JAR。然后,我的输出布局包含 JAR 的名称、其中的 META-INF 以及格式为 Extracted <lib.jar/>
的所有库(抱歉,我无法在此 *** 上上传屏幕截图。)
我构建了我的工件(大约 15MB 大)并将其 FTP 到我的服务器,尝试运行它,但我收到了错误:
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
如何模仿我在 Eclipse 中的操作方式?
编辑
创建的两个 JAR 差别很大:
Eclipse 创建的有效 jar 如下所示:
而无效的 .JAR 看起来像这样:
【问题讨论】:
它是一个 maven 项目吗?你可以使用maven-shade-plugin
很遗憾,这不是 Maven。
可以在jar
任务运行jar任务jar manifest attributes 'Main-Class': 'class name' from configurations.compile.collect it.isDirectory()? it: zipTree(it)
中添加Main Class
这里没有介绍吗? ***.com/questions/1082580/…
这就是为什么您应该为所有项目使用构建工具而不是依赖于您的 IDE。您可以使用 Ant、Gradle 或 Maven 创建可运行的 jar。然后,您只需配置一次构建工具,然后无论使用何种 IDE,它都可以正常工作。
【参考方案1】:
您面临两个问题,一个似乎主要,一个是次要:
重大:签名异常 次要:jar 的大小比 eclipse 生成的 jar 大 15 MB。这两个问题的解决方案在于构建工件的方式。首先移除所有extracted *.jar
,然后如图所示从可用元素pan中添加所有jar。
很明显,仅添加打包(压缩)的 jar 会减小大小。但它也解决了签名问题。如需更多解释,请查看此article。我只引用一行。
最好保持官方 jar 原样,然后将其添加为 清单文件中的依赖......
似乎某些依赖项已签名,并且重新打包会弄乱您项目的 META-INF。
【讨论】:
我在这样做后得到java.lang.NoClassDefFoundError: scala/Function0
。显然它没有正确设置类路径。【参考方案2】:
如果您使用 Maven,则需要将
META-INF
目录放在/main/resources
文件夹下,而不是main/java
。
参考:Intellij - Nikolay Chashnikov
然后就可以用java -jar filename.jar
正常执行runnable jar了
【讨论】:
就是在找这个!【参考方案3】:您可以执行以下步骤:
1) 文件 -> 项目结构 -> 项目设置 -> 工件 -> Jar -> 来自具有依赖关系的模块
2) 选中“包含在项目构建中”复选框。
3) 鼠标右键单击模块 -> 构建模块'ModuleName'
【讨论】:
【参考方案4】:您可以尝试使用 gradle 脚本。 eclipse 会让你成为一个 gradle 项目。您可以在任何 ide 中使用该构建文件。它有一个内置的 jar 任务。
【讨论】:
以上是关于如何像在 Eclipse 中一样在 IntelliJ 中创建可运行的 JAR的主要内容,如果未能解决你的问题,请参考以下文章
如何使回车键将光标移动到 Android Studio 中的行尾,就像在 Eclipse 中一样
像在eclipse中一样在intellij想法中关闭未使用的模块
是否可以像在 Android Studio 中一样在 Eclipse 中使用 Firebase? [复制]
像在 Visual Studio 中一样在 Eclipse 中自动完成
是否可以像在 VS 中拖动箭头一样在 java eclipse 调试器中“返回”
在 IntelliJ IDEA 中更改 Ctrl+Shift+Left/Right 的行为,就像在 Eclipse 中一样