运行 java jar - 没有主清单属性错误
Posted
技术标签:
【中文标题】运行 java jar - 没有主清单属性错误【英文标题】:Run java jar - no main manifest attribute error 【发布时间】:2018-02-04 17:27:30 【问题描述】:我创建了简单的 java 程序(带有 pom 的 maven),当我使用 CMD 运行一些命令时,它应该在给定路径下创建一个文件...我做 mvn clean install
成功完成,
现在我想从命令行使用这个创建的 jar,如下所示:
java -jar "/Users/i012/IdeaProjects/myproj/target/test.rts-1.0-SNAPSHOT.jar" path2genfile2create
哪个应该运行我的程序(这是我第一次尝试这样的事情......)
但我得到的错误是:
no main manifest attribute, in /Users/i012/IdeaProjects/myproj/target/test.rts-1.0-SNAPSHOT.jar
这里可能缺少什么?哪个清单属性?
错误不是来自我创建的类 ...
我创建了一些 META-INF/MANIFEST.MF 没有帮助,但可能是错误的
【问题讨论】:
【参考方案1】:如果您使用的是 Maven 程序集插件,或者您的 IDE 工具是,您需要一个 mainClass
元素。这是我使用的:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.foo.MyMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
【讨论】:
如何运行它? 如果 myprojet 像 myproj->src->main->java>myclass 一样构建,我应该在 mainClass attr 中添加什么? @JennyHilton 包含您要运行的main()
方法的类的 FQN 类名称,例如 Main-class: my.package.MainClass
。
我在这个上下文中的项目结构是:myproj->src->main->java>myclass
完成 1+ 它有效...当我只使用 myclass 时,1. 为什么? 2. 使用 maven-assembly-plugin 是最佳实践吗?谢谢!【参考方案2】:
在我的情况下,我使用的是 spring-boot,但我没有在我的 pom 中提到我的构建器,所以我通过以下方式修复它:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
【讨论】:
【参考方案3】:清单是 jar 中 META-INF/MANIFEST.MF 路径中的一个文件,它定义了类路径和运行 jar 文件的主类等属性。
基本结构如下:
Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)
您可以通过添加属性Main-Class: classname
来定义您的入口点。
要使用给定的清单创建 jar 文件,您可以:
-
使用您的 IDE 将清单添加到它生成的 jar 中。
使用
jar cfm MyJar.jar Manifest.txt MyPackage/*.class
之类的命令手动创建具有给定清单和类的 jar。
手动解压jar,添加manifest,再次压缩。压缩工具通常可以通过拖放来完成。
您可以了解有关 jar 清单文件的更多信息here。
【讨论】:
在您的项目设置 -> 工件中,单击添加,然后选择主类。确保清单的目录已填满。单击确定。在页面上选中 Build on make 复选框,然后按 OK。现在重建你的项目。 我没有找到项目设置你能说一下在哪里 文件 -> 项目结构 我没有找到 make 复选框,但我做了这些步骤,它在 src->main->java 下创建了 META-INF,现在我做了 mvn clean install,我得到了同样的错误,我想念吗还有什么? 提取你试图执行的jar,看看它的结构是否正确。【参考方案4】:您需要一个主类来执行您的应用程序。试试下面的。它对我有用。
如果你使用的是 maven 构建工具,请将以下代码 sn-p 添加到你的 pom.xml 文件中。
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.validator.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
【讨论】:
【参考方案5】:我遇到了同样的问题,通过添加这个插件解决了:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.somepackage.CLASSWITHMAINMETHODE</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
【讨论】:
以上是关于运行 java jar - 没有主清单属性错误的主要内容,如果未能解决你的问题,请参考以下文章
在JAVA中将class文件编译成jar文件包,运行提示没有主清单属性
jar命令成功完成 java -jar 命令却提示“没有主清单属性”!