Жир JAR с Kotlin и Apache Spark 2.3 - PullRequest
0 голосов
/ 27 апреля 2018

Я использую gradle для создания своего проекта, смешивающего Kotlin и Apache Spark, но как только я объявляю зависимость от spark, генерируемый мной Fat JAR перестает работать. В противном случае это будет работать. Исходный код даже не импортирует ничего из Spark

buildscript {
    ext.kotlin_version = '1.2.40'
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin'

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

    // uncomment this line to get main class 'myownpkg.SparkApplicationKt' 
    // not found error
    // compile 'org.apache.spark:spark-core_2.11:2.3.0'
}

jar {
    manifest { attributes 'Main-Class': 'myownpkg.SparkApplicationKt' }
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

После некоторых экспериментов я понял, что в сгенерированном JAR было много дублированных файлов, в результате чего среда выполнения не нашла требуемый .class. Он был запущен после включения Spark, потому что это зависимость, вызывающая снежный ком других зависимостей, имеющих те же пути к файлам в папке META-INF

exclude 'META-INF/*'

Эта строка сделала трюк, чтобы избежать дубликатов, но все еще будет иметь папку META-INF в конечном JAR

0 голосов
/ 27 апреля 2018

Основная причина в том, что вы не создаете артефакт "FatJar" с необходимыми зависимостями. Каталог компиляции в конфигурации содержит только скомпилированный исходный код.

Из maven central вам нужно как минимум 50 зависимостей компиляции, которые требуются для spark-core. Рассматривали ли вы использовать теневой плагин ?

Взгляните на эту тему на обсуждении Gradle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...