运行 java jar - 没有主清单属性错误
Run java jar - no main manifest attribute error
我创建了简单的 java 程序(maven 和 pom ),当我 运行 使用 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
这里可能缺少什么?哪个清单属性?
错误不是来自我创建的 class …
我创建了一些 META-INF/MANIFEST.MF 没有帮助,但可能是错误的
清单是 jar 中路径 META-INF/MANIFEST.MF 中的文件,它定义了诸如 classpath 和 运行 jar 的主要 class 等属性文件。
基本结构如下:
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
之类的命令手动创建具有给定清单和 classes 的 jar。
- 手动解压jar,添加manifest,再次压缩。压缩工具通常可以使用 drag/drop.
您可以找到有关 jar 清单文件的更多信息 here.
如果您使用的是 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>
在我的例子中,我使用的是 spring-boot 但我没有在我的 pom 中提到我的构建器所以我修复了它:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
您需要一个主 class 来执行您的应用程序。尝试以下操作。它对我有用。
如果您使用 Maven 构建工具,请将以下代码片段添加到您的 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>
我遇到了同样的问题,通过添加这个插件解决了这个问题:
<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 程序(maven 和 pom ),当我 运行 使用 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
这里可能缺少什么?哪个清单属性?
错误不是来自我创建的 class …
我创建了一些 META-INF/MANIFEST.MF 没有帮助,但可能是错误的
清单是 jar 中路径 META-INF/MANIFEST.MF 中的文件,它定义了诸如 classpath 和 运行 jar 的主要 class 等属性文件。
基本结构如下:
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
之类的命令手动创建具有给定清单和 classes 的 jar。 - 手动解压jar,添加manifest,再次压缩。压缩工具通常可以使用 drag/drop.
您可以找到有关 jar 清单文件的更多信息 here.
如果您使用的是 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>
在我的例子中,我使用的是 spring-boot 但我没有在我的 pom 中提到我的构建器所以我修复了它:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
您需要一个主 class 来执行您的应用程序。尝试以下操作。它对我有用。
如果您使用 Maven 构建工具,请将以下代码片段添加到您的 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>
我遇到了同样的问题,通过添加这个插件解决了这个问题:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.somepackage.CLASSWITHMAINMETHODE</mainClass>
</manifest>
</archive>
</configuration>
</plugin>