IntelliJ IDEA中错误的Manifest.mf创建.jar

gru*_*olf 99 java intellij-idea optaplanner

我试图通过IntelliJ IDEA的jar工件将使用OptaPlanner 6.0.1库的项目打包到.jar中,而不是我的manifest.mf包含标准

Manifest-Version: 1.0
Main-Class: a.b.c.app
Run Code Online (Sandbox Code Playgroud)

jar使用的是ecta-3.7.2.jar中提供的一个,这是OptaPlanner的支持库之一:

Manifest-Version: 1.0
Build-Jdk: 1.6.0_26
Built-By: ibrandt
Created-By: Apache Maven
Archiver-Version: Plexus Archiver
Run Code Online (Sandbox Code Playgroud)

因此,"no main manifest attribute, in appname.jar"尝试运行应用程序时会发生错误.如果我手动将.jar文件中的清单替换为我的一切正常.有什么办法可以解决这个问题吗?

我将这些库保存在一个单独的/ lib目录中,并将它们作为Extracted Directory添加到jar工件的根目录中,IntelliJ IDEA是v13.0.1.

jam*_*han 249

我有同样的问题.

确保您的MANIFEST.MF位于:

src/main/resources/META_INF/
Run Code Online (Sandbox Code Playgroud)

src/main/java/META_INF/
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案,当项目模板是Maven时,似乎Intellij IDEA错误地放置了META-INF文件夹 (17认同)

Jav*_*aru 10

修理:

  1. 文件>项目结构
  2. 在左侧的项目设置下,选择"工件"
  3. 查找JAR定义在中间窗格中选择它
  4. 在"输出布局"选项卡的左侧窗格中,找到列表中的jar文件并选择它
  5. 在底部,单击"使用现有清单"按钮,然后选择项目源中的清单文件.
  6. 单击"确定"并运行构建

  • 好的,必须删除jar工件并重新创建它,这次是"Empty"而不是"From modules with dependencies".得到了"Create Manifest"和"Use Existing Manifest"按钮,指向我的Manifest和readded库并编译输出.与以前有两点不同:META_INF\MANIFEST.INF现在显式包含在输出布局中,并且jar文件似乎正确生成.:) (5认同)
  • 没有"Use Existing Manifest"按钮,但是Output Layout中的Manifest文件指向正确的位置(...\src\main\java\META-INF\MANIFEST.MF) (3认同)

Aut*_*umn 10

正如@ grudolf在其他一个答案中的评论所述,一种方法(在导入的Gradle项目中唯一一个对我有用的方法)是创建一个空jar,如下所示:

  • 项目结构 - >工件 - > +罐子 - >空
  • 中心窗格现在具有Create Manifest和Use Existing Manifest按钮.使用其中之一.
  • 如果我将具有自己的清单的依赖库提取到输出根中,我会遇到困难,它们似乎间歇性地覆盖新的手动创建的清单.乱七八糟的操作顺序似乎使它成功.

更新:

这绝对是Idea中的一个错误. 当提取目录时,此链接答案可靠地工作.实质上,您找到了.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>
Run Code Online (Sandbox Code Playgroud)


小智 6

如果要指定Main Class,则必须将此插件添加到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>
Run Code Online (Sandbox Code Playgroud)