no main manifest attribute

时间:2020-02-23 14:34:36  来源:igfitidea点击:

在本教程中,我们将看到如何解决无法执行JARFILE:"no main manifest attribute"。

问题

当我们有一个自我执行的jar并尝试执行它时。
我们可能会收到此错误。

Unable to execute jar- file: “no main manifest attribute"
无法执行jar-文件:"没有主列表属性"

解决方案

Maven.

我们可能会在此时出现此错误 Main-ClassManifest.mf文件中缺少条目。
你可以放置 maven-jar-plugin插件 pom.xml要解决这个问题。

<build>
	<plugins>
		<plugin>
			<!-- Build an executable JAR -->
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-jar-plugin</artifactId>
			<version>3.1.0</version>
			<configuration>
				<archive>
					<manifest>
						<mainClass>org.igi.theitroad.AppMain</mainClass>
					</manifest>
				</archive>
			</configuration>
		</plugin>
	</plugins>
</build>

org.igi.theitroad.AppMain是主要类的完全合格的名称。
我们需要用申请的主类替换它。
运行步 mvn clean install然后执行如下所示的JAR文件。

java -jar AppMain-0.0.1-SNAPSHOT.jar

AppMain-0.0.1-SNAPSHOT.jar是我们想要运行的应用程序jar。

Spring启动应用程序

如果运行Spring Boot应用程序的同时,我们就会出现错误,我们可以使用

spring-boot-maven-plugin

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.0.1.RELEASE</version>
        </plugin>
    </plugins>
</build>

如果我们使用Gradle,可以通过以下条目来解决此问题。

plugins {
    id 'java'
}
 
jar {
    manifest {
        attributes(
 
                'Main-Class': 'org.igi.theitroad.AppMain'
        )
    }
}

请替换 org.igi.theitroad.AppMain用你的主班。

根本原因

当你运行自我执行的jar时,java会寻找 Main-Class在ManiceSt.mf文件中位于Meta-Inf文件夹下。
如果它无法找到一个条目,那么它会抱怨 Unable to execute jar- file: “no main manifest attribute”

MANIFEST.MF contains information about files contained in the Jar file.
Manifest-Version: 1.0
Built-By: igi Mandliya
Build-Jdk: 1.8.0_101
Created-By: Maven Integration for Eclipse

一旦我们运行上述解决方案并重新打开 MANIFEST.MFjar中的文件,我们将看到主类条目。

Manifest-Version: 1.0
Built-By: igi Mandliya
Build-Jdk: 1.8.0_101
Created-By: Maven Integration for Eclipse
Main-Class: org.igi.theitroad.AppMain