Java IntelliJ IDEA created.jar中的Manifest.mf错误
我试图通过IntelliJ IDEA的jar工件将使用OptaPlanner 6.0.1库的项目打包到一个.jar中,而不是包含标准的manifest.mfJava IntelliJ IDEA created.jar中的Manifest.mf错误,java,intellij-idea,optaplanner,Java,Intellij Idea,Optaplanner,我试图通过IntelliJ IDEA的jar工件将使用OptaPlanner 6.0.1库的项目打包到一个.jar中,而不是包含标准的manifest.mf Manifest-Version: 1.0 Main-Class: a.b.c.app jar使用ecj-3.7.2.jar中提供的一个,它是OptaPlanner的支持库之一: Manifest-Version: 1.0 Build-Jdk: 1.6.0_26 Built-By: ibrandt Created-By: Apache M
Manifest-Version: 1.0
Main-Class: a.b.c.app
jar使用ecj-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
因此,在尝试运行应用程序时,appname.jar中出现了一个“无主清单属性”
错误。如果我手动将.jar文件中的清单替换为我的清单,那么一切都正常工作。我能做些什么来解决这个问题吗
我将这些库保存在单独的/lib目录中,它们作为提取目录添加到jar工件的根目录,IntelliJ IDEA是v13.0.1。要修复:
有几种方法可以生成可执行JAR。使用IntelliJ的GUI功能是一个好方法。另一种方法是使用构建服务器友好的Maven(或类似地在gradle、buildr等中使用): 它或多或少可以从optaplanner示例maven构建中复制粘贴:
我也有同样的问题 确保您的MANIFEST.MF位于:
src/main/resources/META_INF/
不是
我也有类似的问题 问题出在pom.xml文件中
<archive>
<manifestEntries>
<Dependencies>one.jar,
two.rar,
other.jar
</Dependencies>
</manifestEntries>
</archive>
1.jar,
2.rar,
other.jar
我不知道这段代码在eclipse中工作的原因是什么,但在IntelliJ中不工作
这是正确的
<archive>
<manifestEntries>
<Dependencies>one.jar, two.rar, other.jar</Dependencies>
</manifestEntries>
</archive>
一个.jar,两个.rar,另一个.jar
Manifest.mf成功了
我希望这能有所帮助。正如@grudolf在另一个答案中的评论所指出的,一种方法(也是我在导入的Gradle项目中唯一有效的方法)是创建一个空罐子,如下所示:
- 项目结构->工件->+Jar->空
- 中心窗格现在有“创建清单”和“使用现有清单”按钮。使用其中一个
- 如果我将具有自己清单的依赖库提取到输出根目录中,我会遇到困难,因为它们似乎会间歇性地覆盖手动创建的新清单。混乱的操作顺序似乎使它起作用
元素的顶部。新文件副本上方包含清单的任何提取元素都将破坏新清单
<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>
org.apache.maven.plugins
maven jar插件
2.6
形式
要像清单一样没有问题,您应该在“src”目录中有一个名为“META-INF”的目录。因此,创建它并在其中放置一个名为“MANIFEST.MF”的文件,其中包含以下内容:
Manifest-Version: 1.0
Main-Class: <packageName>.Main
清单版本:1.0
主类:。主
不要忘记替换上面包含主类的包的名称 你知道像ant、maven或gradle这样的构建工具吗?我知道,但到目前为止,我只使用了make和.NET对应的工具(NAnt、MSBuild)。如果IntelliJ的构建工具不能解决这个问题,我应该选择哪一个?投票纠正这个问题,没有“使用现有清单”按钮,但是输出布局中的清单文件指向正确的位置(…\src\main\java\META-INF\Manifest.MF)好的,必须删除jar工件并重新创建它,这次是“空”而不是“空”“来自具有依赖项的模块”。获得“创建清单”和“使用现有清单”按钮,指向我的清单和已读库并编译输出。与以前相比有两个不同之处:META\U INF\MANIFEST.INF现在显式包含在输出布局中,jar文件似乎生成正确。:)这并不能解决问题,至少对我来说是这样。jamahn的回答确实有效。来自低代表性用户@ds justice的评论如下-@grudolf上面关于创建一个空罐子的评论是我在与一个导入的Gradle项目斗争了几个小时后唯一有效的事情。这是一个重要的问题,请考虑把你的评论作为一个单独的答案。这是正确的答案。看起来,当项目模板是MavenIn时,因特利希的想法是错位了Meta -IF文件夹。我不得不改变我的项目的布局。我以前有一个带有maven布局的项目,但我取消了maven的支持。我从头开始重新创建了一个项目,现在它工作了。这对我来说不起作用,我不得不将Mainfest文件移动到项目的根目录。maven是否愚蠢到将此文件放在错误的目录中?:^)@Kumait,该问题仍存在于IntelliJ 2017.1.5中。我想知道JetBrain团队是否意识到了这一点。我在八月份从你的帖子中删掉了宗教内容。请注意,这篇文章中有很多内容,答案是我们宁愿他们被忽略掉。不过,非常欢迎您将它们添加到您的个人资料或头像中。我有一个确切的情况,并得出了与您相同的结论:项目之间的换行在Eclipse中有效,但在Intellij IDEA中无效。
Manifest-Version: 1.0
Main-Class: <packageName>.Main