Gradleの&グルーヴィー - エラー:メインクラスを見つけるか、ロードできませんでした。

10GritSandpaper:

私が使用して自分のプロジェクトを実行することができますgradle runが、私は使用してjarファイルを実行することはできませんjava -jar:私は、このサンプルプロジェクトでエラーを再現しましたGitHubの上のプロジェクトへのリンク

これは、経由でプロジェクトを実行しているから出力され、 gradlew

$ ./gradlew run

> Task :run
Hello world.

BUILD SUCCESSFUL in 4s

これは、プロジェクトを実行しているから出力され、 java -jar

$ ./gradlew build

BUILD SUCCESSFUL in 6s

$ java -jar build/libs/emailer.jar 
Error: Could not find or load main class us.company.emailer.App

しかし、私はとき、私が見ることができますunzipjarApp.class

user@computer:../libs$ unzip emailer.jar 
Archive:  emailer.jar
   creating: META-INF/
  inflating: META-INF/MANIFEST.MF    
   creating: us/
   creating: us/company/
   creating: us/company/emailer/
  inflating: us/company/emailer/App.class

ここです build.gradle

plugins {
    id 'groovy'
    id 'application'
}

repositories {
    jcenter()
    mavenCentral()
}

dependencies {
    implementation 'org.codehaus.groovy:groovy-all:2.5.6'
    testImplementation 'org.spockframework:spock-core:1.2-groovy-2.5'
    compile 'org.apache.commons:commons-email:1.5'
}

mainClassName = 'us.company.emailer.App'

jar {
    manifest {
        attributes(
            'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
            'Main-Class': 'us.company.emailer.App'
        )
    }
}

sourceSets.main.java.srcDirs = ['src/main/groovy']

ここです App.groovy

package us.company.emailer

class App {

    String getGreeting() {
        return 'Hello world.'
    }

    static void main(String[] args) {
        println new App().greeting
    }
}

EDIT:追加MANIFEST.MF@tkruseからのコメントに反応して

Manifest-Version: 1.0
Class-Path: commons-email-1.5.jar javax.mail-1.5.6.jar activation-1.1.
jar
Main-Class: us.company.emailer.App
tim_yates:

問題は、クラスパスです。あなたが内部を見る場合はMETA-INF/MANIFEST.mf、ファイル、あなたはそれのセットにを見ることができます:

Class-Path: commons-email-1.5.jar javax.mail-1.5.6.jar activation-1.1.
 jar

Javaの実行、それはこれらのもののいずれかがあるないアイデアを持っていない場合、それはまたあなたのGroovyのコードを理解するために、グルーヴィーなランタイムが必要です。

これを行う最も簡単な方法は、「にすべてのあなたの依存関係をバンドルすることである脂肪瓶」、とのGradleでこれを行う最も簡単な方法は、優れているシャドウ・ジャーのプラグイン

あなたに次を追加した場合pluginsにおけるブロックbuild.gradle

    id 'com.github.johnrengelman.shadow' version '5.0.0'

(あなたは削除することができますjarブロックとsourceSetsを操作ライン)

そして、実行 ./gradlew shadowJar

あなたはjarファイルを取得します emailer-all.jar

どちらが実行できます。

$ java -jar build/libs/emailer-all.jar
Hello world.

完全を期すため、ここでは完全なbuild.gradleファイルがあります:

plugins {
    id 'groovy'
    id 'application'
    id 'com.github.johnrengelman.shadow' version '5.0.0'
}

repositories {
    jcenter()
    mavenCentral()
}

dependencies {
    implementation 'org.codehaus.groovy:groovy-all:2.5.6'
    testImplementation 'org.spockframework:spock-core:1.2-groovy-2.5'
    implementation 'org.apache.commons:commons-email:1.5'
}

mainClassName = 'us.company.emailer.App'

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=202973&siteId=1