gradle 构建 "ClassNotFoundException"
gradle build "ClassNotFoundException"
我正在尝试构建 运行 Jetty 嵌入式 "hello world" 应用程序。
构建成功且没有错误,但是当我尝试 运行 时出现错误。我认为这是因为当我 运行 jetty jar 没有添加到类路径中。但是我还没有想出在我的 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
由于您是使用 gradle 构建的,因此您最好也使用 gradle 运行,而不是通过 "java" 在命令中手动 运行ning行。
如果您想 运行 您的 class,您需要指定整个 class 路径(包括您的依赖项 jar)。您只告诉 java 您的 class 在哪里。
我建议在 Gradle 中使用 JavaExec
任务。
例如:
task run(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'ChessServer'
}
然后从命令行
gradle run
还有 application plugin 可以将您的 classes 和依赖项打包为一个 zip。
我正在尝试构建 运行 Jetty 嵌入式 "hello world" 应用程序。
构建成功且没有错误,但是当我尝试 运行 时出现错误。我认为这是因为当我 运行 jetty jar 没有添加到类路径中。但是我还没有想出在我的 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
由于您是使用 gradle 构建的,因此您最好也使用 gradle 运行,而不是通过 "java" 在命令中手动 运行ning行。
如果您想 运行 您的 class,您需要指定整个 class 路径(包括您的依赖项 jar)。您只告诉 java 您的 class 在哪里。
我建议在 Gradle 中使用 JavaExec
任务。
例如:
task run(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'ChessServer'
}
然后从命令行
gradle run
还有 application plugin 可以将您的 classes 和依赖项打包为一个 zip。