Gradle реализация против компиляции в JAR-задаче - PullRequest
0 голосов
/ 29 января 2019

Я могу успешно использовать Gradle для компиляции толстого JAR, но у меня возникают проблемы с запуском JAR после недавнего переключения с спецификации зависимости "compile" на спецификацию "реализация / api".Я выделил, что проблема возникает только в одном из двух следующих случаев.Приложение работает в любом случае внутри IntelliJ.

первый / проблема:

dependencies {implementation 'no.tornado:tornadofx:1.7.18'}

второй / работы:

dependencies {compile'no.tornado:tornadofx:1.7.18'}

JAR компилируется в обоих случаях.Проблема появляется, когда я пытаюсь запустить JAR первого случая в командной строке, и он выдает следующую ошибку.

C: \ aaa_eric \ code \ testr \ mic \ build \ libs> java -jar mic-1.0-snapshot.jar Ошибка: не удалось найти или загрузить основной класс приложения. MyApp Причина: java.lang.NoClassDefFoundError: tornadofx / App

Вот задача JAR в build.gradle.Возможно ли, что зависимость tornadofx доступна во время компиляции, но не во время выполнения?Спасибо за любую помощь.

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

1 Ответ

0 голосов
/ 10 апреля 2019

Изменение configurations.compile.collect на configurations.compileClasspath.collect устранило проблему для меня.

У меня была такая же проблема, и я наткнулся на это в https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ConfigurationContainer.html:

Пример, показывающий, какссылаться на заданную конфигурацию по имени, чтобы овладеть всеми зависимостями (например, jars, но только)

apply plugin: 'java' //so that I can use 'implementation', 'compileClasspath' configuration

dependencies {
    implementation 'org.slf4j:slf4j-api:1.7.26'
}

//copying all dependencies attached to 'compileClasspath' into a specific folder
task copyAllDependencies(type: Copy) {
    //referring to the 'compileClasspath' configuration
    from configurations.compileClasspath
    into 'allLibs'
}

Следует отметить, что configurations.compileClasspath.collect работал для меня, даже когда яиспользовал compile спецификацию вместо implement.

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