Как собрать файл JAR с Gradle с зависимостями - PullRequest
0 голосов
/ 12 ноября 2018

Я создаю файл фляги с Gradle.Этот файл JAR используется в качестве библиотеки в другом проекте.Но когда проект пытается использовать файл JAR, возвращается ClassNotFoundException.

  Caused by: java.lang.NoClassDefFoundError: com/auth0/jwt/JWT

Я включил библиотеку jwt в файл Gradle при создании jar:

  compile group: 'com.auth0', name: 'java-jwt', version: '3.4.0'

Проект, использующий jar, не может найти эту зависимость jar в jar.

Я собрал банку с помощью команды gradle:

 task fatJar(type: Jar) {
     manifest {
         attributes 'Implementation-Title': 'Jar File creation',
            'Implementation-Version': version,
            'Main-Class': 'com.group.me.name.MyJarClass'
     }
     baseName = project.name + '-all'
     from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
     with jar
     exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
  }

Как включить отсутствующую зависимость в банку?

1 Ответ

0 голосов
/ 13 ноября 2018

Как правило, вы не должны упаковывать зависимости внутри опубликованного JAR-файла. Лучше объявить их как зависимости в pom.xml и позволить пользователю JAR получить их. Это просто хорошая практика, которой должно быть достаточно.

Если этого недостаточно, используйте Gradle Shadow :

plugins {
    id 'com.github.johnrengelman.shadow' version '4.0.2'
}

Жирный JAR производится с задачей shadowJar в этом случае. Публикация также проста:

publishing {
    publications {
        shadow(MavenPublication) { publication ->
            project.shadow.component(publication)
        }
    }
    repositories {
        maven {
            url "http://your.repo"
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...