IntelliJ IDEA中错误的Manifest.mf创build.jar
我试图通过IntelliJ IDEA的jar神器打包一个使用OptaPlanner 6.0.1库到一个.jar的项目,而不是我的manifest.mf包含标准
Manifest-Version: 1.0 Main-Class: abcapp
该jar使用在OptaPlanner的支持库之一ecj-3.7.2.jar中提供的一个:
Manifest-Version: 1.0 Build-Jdk: 1.6.0_26 Built-By: ibrandt Created-By: Apache Maven Archiver-Version: Plexus Archiver
因此,尝试运行应用程序时会出现"no main manifest attribute, in appname.jar"
错误。 如果我手动replace.jar文件中的清单,我的一切工作正常。 有什么我可以做的,以解决这个问题?
我将这些库保存在一个单独的/ lib目录下,并将它们作为Extracted Directory添加到jar工件的根目录下,IntelliJ IDEA是v13.0.1。
我有同样的问题。
确保你的MANIFEST.MF在:
src/main/resources/META_INF/
不
src/main/java/META_INF/
修理:
- 文件>项目结构
- 在左侧的项目设置下,select“Artifacts”
- findJAR定义在中间窗格中select它
- 在“输出布局”选项卡的左侧窗格中,find列表中的jar文件并将其选中
- 在底部,单击“使用现有清单”button并select您的项目源中的清单文件。
- 单击确定并运行构build
正如在其他答案之一@ grudolf的评论中所指出的,一种方法(以及在导入的Gradle项目中为我工作的唯一方法)是创build一个空的jar,如下所示:
- 项目结构 – >工件 – > +jar子 – >空
- 中心窗格现在具有创build清单和使用现有清单button。 使用其中之一。
- 我有困难,如果我提取依赖库与自己的清单到输出根,他们似乎间歇地覆盖新手动创build的清单。 乱七八糟的操作顺序似乎使它的工作。
更新:
这绝对是一个错误的想法。 链接的答案在提取目录时可靠地工作。 本质上,你可以find你的.idea / JARNAME.xml,添加下面的元素到你的jar的<root>
元素的最顶端 。 包含清单的新文件上方的任何提取的元素将会打乱您的新清单。
<element id="directory" name="/META-INF"> <element id="file-copy" path="$PROJECT_DIR$/modulename/src/META-INF/MANIFEST.MF" /> </element>
如果你想指定主类,你必须把这个插件添加到pom.xml中:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <manifest> <mainClass>Form</mainClass> </manifest> </archive> </configuration> </plugin>
有几种方法来生成可执行文件。 使用IntelliJ的GUIfunction是一个好方法。 另一种方法是使用Maven (或类似的gradle,buildr等),这是构build服务器友好:
这是从optaplanner的例子或多或less复制粘贴maven构build:
- 最终用户jar(optaplanner-examples – *。jar)必须在其清单中包含其依赖关系的类path 。
- sh和bat脚本必须相应地运行该jar。
我有一个类似的问题。
问题出在文件pom.xml中。
<archive> <manifestEntries> <Dependencies>one.jar, two.rar, other.jar </Dependencies> </manifestEntries> </archive>
我不知道这个代码在eclipse中是什么原因,但不是在IntelliJ中
这是正确的。
<archive> <manifestEntries> <Dependencies>one.jar, two.rar, other.jar</Dependencies> </manifestEntries> </archive>
Manifest.mf工作!
我希望这有帮助。
要没有像Manifest这样的问题,你应该在“src”目录下有一个名为“META-INF”的目录。 因此,创build一个名为“MANIFEST.MF”的文件,其中包含以下内容:
Manifest-Version: 1.0 Main-Class: <packageName>.Main
不要忘记更换上面包含Main类的包名!