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/ 

修理:

  1. 文件>项目结构
  2. 在左侧的项目设置下,select“Artifacts”
  3. findJAR定义在中间窗格中select它
  4. 在“输出布局”选项卡的左侧窗格中,find列表中的jar文件并将其选中
  5. 在底部,单击“使用现有清单”button并select您的项目源中的清单文件。
  6. 单击确定并运行构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:

  1. 最终用户jar(optaplanner-examples – *。jar)必须在其清单中包含其依赖关系的类path 。
  2. 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类的包名!