我在运行由Intellij创建的jar时获得no main manifest attribute
。我提取了jar并观察到有另一个清单文件,而不是我在创建工件时指定的文件。
当我在IDE中打开清单时,它会正确显示所有内容,但在创建jar后,我会得到一个全新的清单文件。
Manifest-Version: 1.0
Main-Class: YoutubeList
我尝试了其他答案中的所有解决方案,但仍然没有做到正确。为什么创建一个简单的jar是Intellij中的一项任务,它应该可以帮助开发人员!
被修改
有时它不包含Jar中的.class文件,导致could not found or load class
答案 0 :(得分:46)
我遇到了与maven构建相同的问题。 当您从项目结构设置(ctrl + alt + shift + S)创建工件时,您必须更改清单目录:
<project folder>\src\main\java
将java更改为资源
<project folder>\src\main\resources
我还使用了选项提取到目标JAR,它运行良好。
修改强>
您可以在此处找到详细的详细步骤和其他解决方案:https://stackoverflow.com/a/45303637/2640826
答案 1 :(得分:5)
确保您的pom.xml具有引用的主类和完全限定类,类似于:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<mainClass>org.mypkg.MyMainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
(...当然插件的版本号可能不同)。
主要类别不完全合格,是导致人们建议将清单移动到另一个位置的原因(为了在本地满足参考)。
答案 2 :(得分:4)
我花了几天时间来解决它。我的解决方案:我加载了this answer中的项目。然后我比较并更正了加载的项目和我自己的项目的设置。我比较/纠正了:
最后,我将META-INF放在资源目录中。
也许我做了多余的行动,但它对我有用:)
P.S。还需要在Progect Structure设置中选择“继承项目编译输出路径” - &gt;模块 - &gt;路径
答案 3 :(得分:2)
可以将META-INF文件夹放在mymethods.gradle
中,但不能这样做:Intellij只是将所有内容放在*/resources
或main/resources
的根目录下生成的jar的级别,这就是它起作用的原因;但是在Java项目中,我们通常将它们放在项目根目录下,该根目录与test/resources
处于同一级别。将它们放在“资源”下是违反惯例的,此外,它们不是资源文件。
确保您:
src
文件; MANIFEST.MF
Include in Project build
标签中,除了“项目已编译的输出”外,文件中还列出了META-INF
文件夹以包含在jar中。然后保存设置,再次构建,然后进入“构建”菜单以“构建工件..”,然后“构建” JAR。再次检查生成的jar,使用Output Layout
运行。
答案 4 :(得分:1)
在File
/ Project structure
/ Artifacts
下,您可以指定jar的构建方式。您可以选择使用现有文件作为清单,也可以创建一个新文件,在这种情况下,您可以指定主类和类路径......
答案 5 :(得分:1)
对于Idea Intellij 2020:
消除混淆(如果存在)
删除/(移动到项目之外的某个地方)资源管理器中的META-INF
文件夹
删除项目结构中的工件->工件->'-'
重建项目
再次将工件添加到项目结构->工件->'+'
重建项目
构建->构建工件。
现在新生产的罐子应该可以工作了
答案 6 :(得分:0)
实际上,我通过在build.gradle
中添加以下几行来解决了该问题
jar {
manifest {
attributes 'Main-Class': 'class name'
}
from {
configurations.compile.collect {
it.isDirectory()? it: zipTree(it)
}
}
}
答案 7 :(得分:0)
答案 8 :(得分:0)
在IntelliJ Idea 2020中
遵循此video中的说明。
当您到达工件创建点(Ctrl + Shift + Alt + S)时,请更改清单的位置,如下所示。 (\ src \ main \ resources)
答案 9 :(得分:-1)