Je suis débutant avec Java et j'ai des problèmes lorsque je lance mon .jar. J'ai reçu une ClassNotFoundException sur une classe netty. Il semble logique que mon .jar ne trouve pas les classes de netty.Java: ClassNotFoundException lors de l'exécution du programme avec netty [Gradle]
Voici ma trace:
Exception in thread "main" java.lang.NoClassDefFoundError: io/netty/channel/EventLoopGroup
\t at src.Main.main(Main.java:14)
Caused by: java.lang.ClassNotFoundException: io.netty.channel.EventLoopGroup
\t at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
\t at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
\t at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
\t ... 1 more
La compilation fonctionne très bien avec gradle. Ma build.gradle principale appelle 2 build.gradle dans différents dossiers qui compilent le programme. Voici ma principale build.gradle:
subprojects {
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'io.netty:netty-all:4.1.16.Final'
compile files("./lib/netty-all-4.1.16.Final.jar")
testCompile 'junit:junit:4.12'
}
}
Et voici une build.gradle qui est invoquée par le principal build.gradle, il compile mon sources.java:
apply plugin: "java"
sourceSets {
main.java.srcDir "./src/"
}
jar {
manifest.attributes "Main-Class": "src.Main"
destinationDir project.file('../Jar/')
baseName 'Server'
}
Mon arbre ressemble à ce fichier:
MyProject
--> build.gradle
--> settings.gradle
--> lib [DIR]
--> netty-all-4.1.16.Final.jar
--> server [DIR]
--> build.gradle
--> src [DIR]
--> Main.java
Je ne comprends pas pourquoi quand je compile tout fonctionne, et quand je le lance ne trouve pas les classes netty.
Pourriez-vous s'il vous plaît aide-moi? Merci! Lorsque vous exécutez à partir de la ligne de commande, vous n'ajoutez pas les fichiers jar au chemin d'accès à l'exécution qui étaient présents sur le chemin de classe de l'heure de la compilation.
Comment utilisez-vous votre application? Utilisez-vous Gradle ou l'invoquez-vous directement? L'exception indique que les classes Netty ne se trouvent pas dans votre chemin de classe d'exécution. –
Salut Oz, pour compiler j'utilise 'build gradle', et pour exécuter mon .jar j'utilise java -jar myjar.jar – Fake
Vous pouvez regarder cette réponse: https://stackoverflow.com/a/18413058/327680 –