无法执行jar文件:mainclass属性缺少Intellij Gradle

时间:2018-06-18 12:14:49

标签: java gradle intellij-idea jar export

我正在尝试将我的项目从Intellij导出到jar。每当我尝试双击jar并启动它时,它会给出错误“无法启动Java Jar文件。请查看控制台以获取更多信息”。然后控制台说“没有主要的清单属性”。我搜索了一下,发现我的Manifest没有正确导出。在Intellij中,它在MANIFEST.MF中有xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".startingfragment">

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

Main-Class: MainFrame

虽然我在Intellij中的表现包含:

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

我使用gradle

Manifest-Version: 1.0
Main-Class: MainFrame

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

我也观看了几部Youtube视频,但似乎没有人修好它。

为什么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' } } - 属性没有正确地嵌入到jar中的Manifest中,我该如何修复它?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并且正在使用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

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

干杯!