3

Так у меня есть проект по 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 действительно включает ЮНУ как зависимость, но если я удалю ЮНУ зависимости в моем основном проекте, он не запускается.

+0

Вы попробовали -d (отладить) вариант, чтобы увидеть, что на самом деле происходит? также, какую команду вы используете для создания банки? – AdamSkywalker

+0

@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

+0

Появляется это соответствующие строки: http://pastebin.com/raw.php?i=N5pE1M1C, поэтому кажется, что он получает JNA, но программа не запускается, hmmm – Taha

ответ

1

Это оказалось проблемой с файлом pom вверх по течению. Они переключили зависимость от зависимости от времени компиляции и зависят от времени выполнения и исправили ее.

+0

Я вхожу в та же проблема, можете ли вы дать мне более подробную информацию? –

Смежные вопросы