首页 > 解决方案 > 无法执行 jar 文件:缺少 mainclass 属性 Intellij Gradle

问题描述

我正在尝试将我的项目从 Intellij 导出到 jar 中。每当我尝试双击 jar 并启动它时,它都会给我错误“无法启动 Java Jar 文件。请检查控制台以获取更多信息”。控制台然后说“没有主要清单属性”。我搜索了一下,发现我的清单没有正确导出。在 Intellij 中,它Main-Class: MainFrame位于 MANIFEST.MF 中。

我用 Unarchiver 打开了 jar,属性缺少 jar 的清单。导出的清单包含:

Manifest-Version: 1.0
Bundle-Description: Servlet Specification API
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0
Bundle-SymbolicName: org.mortbay.jetty.servlet-api
Archiver-Version: Plexus Archiver
Built-By: janb
Bundle-RequiredExecutionEnvironment: J2SE-1.4
Bnd-LastModified: 1229016831353
Bundle-ManifestVersion: 2
Bundle-DocURL: http://www.mortbay.com
Bundle-Vendor: Mort Bay Consulting
Tool: Bnd-0.0.238
Implementation-Vendor: JCP
Originally-Created-By: 1.5.0_13 (Sun Microsystems Inc.)
Export-Package: javax.servlet.http;uses:="javax.servlet";version="2.5"
 ,javax.servlet;version="2.5",javax.servlet.resources;version="2.5",ja
 vax.servlet.jsp.resources;version="2.5"
Bundle-Version: 2.5
Bundle-Name: Servlet Specification API
Ignore-Package: javax.servlet.http,javax.servlet,javax.servlet.resourc
 es,javax.servlet.jsp.resources
Created-By: 1.5.0_13 (Sun Microsystems Inc.)
Build-Jdk: 1.5.0_13
Specification-Version: 2.5

虽然我在 Intellij 中的清单包含:

Manifest-Version: 1.0
Main-Class: MainFrame

我使用 gradle

group 'tasks'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'MainFrame'
sourceCompatibility = 1.8
targetCompatibility = 1.8
version = '1.0'

jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart',
                'Implementation-Version': version,
                'Main-Class': 'MainFrame'
    }
}

我已经尝试将 META-INF 移动到资源并清理并重建工件,这是在使用 Intellij 2016 创建 Jar - No main manifest attribute中建议的。我也知道 Intellij 特定问题,如果它没有移动到资源文件夹,它找不到清单。

我还观看了几个 Youtube 视频,但似乎都没有修复它。

为什么mainclass-Attribute 没有正确嵌入到 jar 的清单中,我该如何解决?

标签: javagradleintellij-ideajarexport

解决方案


我遇到了同样的问题,我正在使用 IntelliJ 进行编码。在我的gradle上,我写了下面的代码

    buildscript {
    ext {
        springBootVersion = '2.1.6.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'


bootJar {
    baseName = 'yournameforyourjar'
    version =  '0.1.0'
}

jar {
    manifest {
        attributes(
                'Main-Class': 'yourpackagename.Application'
        )
    }
}


repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {

    compile group: 'org.springframework.boot', name: 'spring-boot', version: '2.1.6.RELEASE'
    implementation("org.springframework.boot:spring-boot-starter-web")

   //the rest of you dependencies add here


}

之后,我可以通过 IDE 上的终端运行以下命令直接生成 .jar:

gradlew clean build

您将在名为 build/libs 的目录中的项目文件夹中找到生成的 .jar

干杯!!!


推荐阅读