„Konnte nicht gefunden oder geladen werden Haupt-Klasse“ – Fehler für die Gradle-generiert Scala GLAS

Nach viel Forschung, ich kann nicht scheinen, um an die Wurzel des problem ich bin mit in die Generierung einer lauffähigen Scala jar-Datei mit Gradle. Ich bin überschreiben der ‚jar‘ Gradle-task zum erstellen einer jar-Datei (Abhängigkeiten enthalten), die ausgeführt wird, ausgehend von meiner main-Klasse-Datei. Allerdings, wenn ich es laufen, egal was ich für eine Main-Class-Attribut, die Konsole wirft ein „Konnte nicht gefunden oder geladen werden-main class“ – Fehler. Hier ist, was ich habe, so weit:

bauen.gradle

buildscript {
    repositories {
        mavenCentral()
    }
}

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

repositories {
    mavenCentral()
    //some other repos
}

version = '1.0'
sourceCompatibility = 1.8
targetCompatibility = 1.8

mainClassName = "com.test.Main"

dependencies {
    //my dependencies
}

jar {
    zip64 = true

    manifest {
        attributes "Main-Class": "$mainClassName"
    }

    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

src/main/scala/com/test/Main.scala

package com.test

object Main {
  def main(args: Array[String]): Unit = {
    print("Hello world");
  }
}

In der Tat, wenn ich „java-tf test.jar“ es zeigt „com/test/Main.class“ in den root von der jar! Fehlen mir einige wichtige class-path-info, oder was? Ich bin mit Java 1.8 auf macOS Sierra mit Gradle 3.5. Jede Hilfe ist willkommen. Danke!

InformationsquelleAutor Nickersoft | 2017-05-16



2 Replies
  1. 4

    Ich hatte ein ähnliches problem und es stellte sich heraus, dass meine META-INF-Ordner in meinem jar-file enthält ein paar von RSA -, SF-und DSA-Dateien.

    Sobald ich ausgeschlossen, es funktionierte!

    hier ist, wie Sie basierend auf Ihre jar-Erklärung

    jar {
        zip64 = true
    
        manifest {
            attributes "Main-Class": "$mainClassName"
        }
    
        from {
            configurations.compile.collect { it.isDirectory() ? it : zipTree(it) 
        }
        exclude ('META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA')
    }
  2. 0

    Können Sie die Schatten-Jar-Plugin anstelle von eigenen jar-definition.

    Vorteile von Shadow

    Shadowing ein Projekt ausgegeben hat, die 2 wichtigsten Anwendungsfälle:

    • Erstellen einer ausführbaren JAR-Verteilung
    • Bündelung und Verlagerung gemeinsame Abhängigkeiten in den Bibliotheken zu vermeiden classpath Konflikte

    Basic setup:

    shadowJar {
        baseName = 'your-app'
        classifier = 'all'
        version = version
        configurations = [project.configurations.compile]
    }
    
    jar {
        manifest {
            attributes 'Main-Class': 'com.test.Main'
        }
    }

    Können Sie die neue syntax von Gradle Plugins:

    plugins {
        id 'java'
        id 'scala'
        id 'application'
    }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.