Так у меня есть проект по here, который имеет следующую build.gradle:Переходные транзисторы Gradle не работают?
// PLUGINS
plugins {
id 'java' // or 'groovy' Must be explicitly applied
id 'com.github.johnrengelman.shadow' version '1.2.2'
}
apply plugin: 'application'
apply plugin: 'java'
// REPOSITORIES & DEPENDENCIES
repositories {
mavenCentral()
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'joda-time:joda-time:2.9'
compile 'com.miglayout:miglayout-swing:5.0'
compile 'com.dorkbox:SystemTray:1.9'
compile 'com.dorkbox:SystemTray-Dorkbox-Util:1.9'
compile 'net.java.dev.jna:jna:4.2.1'
compile 'org.slf4j:slf4j-simple:1.7.5'
compile 'commons-cli:commons-cli:1.3.1'
}
// SETTING THE MAIN CLASS
mainClassName = "com.github.tgharib.Program"
jar {
manifest {
attributes 'Main-Class': 'com.github.tgharib.Program'
}
}
В настоящее время, после этих build instructions компилирует приложение просто отлично. Однако для библиотеки com.dorkbox:SystemTray
я должен включить транзитивные зависимости SystemTray: net.java.dev.jna:jna
и org.slf4j:slf4j-simple
. Если я правильно понимаю, Gradle автоматически включает транзитивные зависимости по умолчанию, но если я удалю строку compile 'net.java.dev.jna:jna:4.2.1'
, например, моя программа все еще компилируется, но она не запускается (поскольку JNA - это зависимость от времени выполнения).
Я потратил около 3 часов, пытаясь исправить это, но я не смог его решить. Один из пользователей SO предложил очистить кеш, поскольку исправил проблему для него, но очистка кеша не устранила проблему. Я также узнал о команде gradle dependencies
. Вот результат:
:dependencies
------------------------------------------------------------
Root project
------------------------------------------------------------
archives - Configuration for archive artifacts.
No dependencies
compile - Compile classpath for source set 'main'.
+--- joda-time:joda-time:2.9
+--- com.miglayout:miglayout-swing:5.0
| \--- com.miglayout:miglayout-core:5.0
+--- com.dorkbox:SystemTray:1.9
| +--- org.slf4j:slf4j-api:1.6.4 -> 1.7.5
| \--- net.java.dev.jna:jna:4.2.1
+--- com.dorkbox:SystemTray-Dorkbox-Util:1.9
| \--- net.java.dev.jna:jna:4.2.1
+--- org.slf4j:slf4j-simple:1.7.5
| \--- org.slf4j:slf4j-api:1.7.5
\--- commons-cli:commons-cli:1.3.1
default - Configuration for default artifacts.
+--- joda-time:joda-time:2.9
+--- com.miglayout:miglayout-swing:5.0
| \--- com.miglayout:miglayout-core:5.0
+--- com.dorkbox:SystemTray:1.9
| +--- org.slf4j:slf4j-api:1.6.4 -> 1.7.5
| \--- net.java.dev.jna:jna:4.2.1
+--- com.dorkbox:SystemTray-Dorkbox-Util:1.9
| \--- net.java.dev.jna:jna:4.2.1
+--- org.slf4j:slf4j-simple:1.7.5
| \--- org.slf4j:slf4j-api:1.7.5
\--- commons-cli:commons-cli:1.3.1
runtime - Runtime classpath for source set 'main'.
+--- joda-time:joda-time:2.9
+--- com.miglayout:miglayout-swing:5.0
| \--- com.miglayout:miglayout-core:5.0
+--- com.dorkbox:SystemTray:1.9
| +--- org.slf4j:slf4j-api:1.6.4 -> 1.7.5
| \--- net.java.dev.jna:jna:4.2.1
+--- com.dorkbox:SystemTray-Dorkbox-Util:1.9
| \--- net.java.dev.jna:jna:4.2.1
+--- org.slf4j:slf4j-simple:1.7.5
| \--- org.slf4j:slf4j-api:1.7.5
\--- commons-cli:commons-cli:1.3.1
shadow
No dependencies
testCompile - Compile classpath for source set 'test'.
+--- joda-time:joda-time:2.9
+--- com.miglayout:miglayout-swing:5.0
| \--- com.miglayout:miglayout-core:5.0
+--- com.dorkbox:SystemTray:1.9
| +--- org.slf4j:slf4j-api:1.6.4 -> 1.7.5
| \--- net.java.dev.jna:jna:4.2.1
+--- com.dorkbox:SystemTray-Dorkbox-Util:1.9
| \--- net.java.dev.jna:jna:4.2.1
+--- org.slf4j:slf4j-simple:1.7.5
| \--- org.slf4j:slf4j-api:1.7.5
\--- commons-cli:commons-cli:1.3.1
testRuntime - Runtime classpath for source set 'test'.
+--- joda-time:joda-time:2.9
+--- com.miglayout:miglayout-swing:5.0
| \--- com.miglayout:miglayout-core:5.0
+--- com.dorkbox:SystemTray:1.9
| +--- org.slf4j:slf4j-api:1.6.4 -> 1.7.5
| \--- net.java.dev.jna:jna:4.2.1
+--- com.dorkbox:SystemTray-Dorkbox-Util:1.9
| \--- net.java.dev.jna:jna:4.2.1
+--- org.slf4j:slf4j-simple:1.7.5
| \--- org.slf4j:slf4j-api:1.7.5
\--- commons-cli:commons-cli:1.3.1
(*) - dependencies omitted (listed previously)
BUILD SUCCESSFUL
Total time: 4.544 secs
Так как вы можете видеть, SystemTray действительно включает ЮНУ как зависимость, но если я удалю ЮНУ зависимости в моем основном проекте, он не запускается.
Вы попробовали -d (отладить) вариант, чтобы увидеть, что на самом деле происходит? также, какую команду вы используете для создания банки? – AdamSkywalker
@AdamSkywalker Чтобы построить JAR, я использовал команду 'gradle shadowJar'. Однако такая же проблема возникает даже при запуске класса. Если я включаю JNA в зависимость, 'gradle run' запускает его просто отлично, но если я этого не делаю,' gradle run' выдает зависимость от времени выполнения. Вот результат 'gradle -d run' без' compile 'net.java.dev.jna: jna: 4.2.1'' строка: http://pastebin.com/raw.php?i=c9VfL9BE – Taha
Появляется это соответствующие строки: http://pastebin.com/raw.php?i=N5pE1M1C, поэтому кажется, что он получает JNA, но программа не запускается, hmmm – Taha