簡體   English   中英

.jar 文件中沒有主要清單屬性

[英]No main manifest attribute in .jar file

我一直在尋找幾個不同的線程,但沒有找到解決方案。 我做了一個項目,它使用 java 和 gradle 從谷歌表格中檢索數據。 我創建了一個工件並通過 intelliJ 構建了 jar 文件。 當我嘗試使用“java -jar filename.jar”通過終端運行 jar 時,我得到“在 filename.jar 中沒有主清單屬性”

我的 MANIFEST.MF 位於 main/java/META-INF 並具有以下簡單結構

Manifest-Version: 1.0
Main-Class: Main

build.gradle文件結構如下:

plugins {
    id 'java'
}

group  'filename'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile 'com.google.api-client:google-api-client:1.30.4'
    compile 'com.google.oauth-client:google-oauth-client-jetty:1.30.4'
    compile 'com.google.apis:google-api-services-sheets:v4-rev581-1.25.0'
}

顯然,我已經在 class 中說明了主要方法是什么,這就是為什么這個錯誤消息對我來說毫無意義。 有人對此有解決方案嗎?

我已按照表格 API快速入門中的步驟設置應用程序。 之后,我按照其他答案中的步驟生成 .jar 文件,這說明您應該在jar屬性內的 build.gradle 文件中聲明清單文件。

在此之后,當運行生成的.jar 文件時,我得到一個“無效的簽名文件”錯誤,我可以通過在 jar 屬性中添加以下行修復該錯誤,如下所述:

exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'

生成 .jar 文件后,您可以在項目的build/libs目錄中找到它。 我的最終build.gradle文件如下所示:

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

group 'egs'
version '1.0-SNAPSHOT'

mainClassName = 'SheetsQuickstart'
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile 'com.google.api-client:google-api-client:1.30.4'
    compile 'com.google.oauth-client:google-oauth-client-jetty:1.30.4'
    compile 'com.google.apis:google-api-services-sheets:v4-rev581-1.25.0'
}

jar {
    manifest {
        attributes 'Main-Class': 'SheetsQuickstart'
    }
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM