gradle build "ClassNotFoundException" - PullRequest
       26

gradle build "ClassNotFoundException"

0 голосов
/ 07 июля 2019

Я пытаюсь собрать и запустить встроенное приложение Jetty "hello world".

Сборка завершается без ошибок, но при попытке запустить я получаю ошибку.Я предполагаю, что это потому, что кувшин (ы) причала не добавляются в classpath, когда я запускаю его.Но я не нашел правильного подхода к исправлению этой проблемы в моей сборке Gradle.

Мой build.gradle выглядит следующим образом ...

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.eclipse.jetty:jetty-servlet:+'
    implementation 'org.eclipse.jetty:jetty-client:+'
    // implementation 'org.eclipse.jetty:jetty-webapp:+'
    // implementation 'org.eclipse.jetty:jetty-jsp:+'
    // implementation 'org.eclipse.jetty:jetty-annotations:+'
}

У моего приложения есть два основных исполняемых класса,ChessServer и ChessClient.

Команда, которую я использую для запуска ChessServer, выглядит следующим образом ...

java -ea -cp build/classes/java/main/ ChessServer

И конкретная ошибка, которую я получаю во время выполнения ...

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Server
    at ChessServer.main(ChessServer.java:6)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.server.Server
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

1 Ответ

1 голос
/ 07 июля 2019

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

Если вы хотите запустить свой класс, вам нужноукажите полный путь к классу (включая ваши jar-файлы зависимостей).Вы только сказали Java, где ваши классы.

Я предлагаю использовать задачу JavaExec в Gradle.

Например:

task run(type: JavaExec) {
   classpath = sourceSets.main.runtimeClasspath 
   main = 'ChessServer'
} 

Затем из командной строки

gradle run

Есть также плагин приложения , который может связывать ваши классы и зависимости в виде zip.

...