我刚刚将SpringSource Tools Suite(STS,Eclipse的变体IDE)升级到最新版本(v3.6.1).然后我的所有JUnit单元测试都无法再次运行.我收到此错误:
Class not found ClassToTest
java.lang.ClassNotFoundException: ClassToTest
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
Run Code Online (Sandbox Code Playgroud)
根据这篇博客: 在Eclipse中运行JUnit单元测试时使用ClassNotFoundException(使用Maven),这是因为Eclipse中的一些Maven插件配置错误.但是,在STS 3.6.2中,我在Maven插件中找不到此选项"Include Modules".如何解决此问题并重新启用单元测试?
eclipse unit-testing maven-plugin maven classnotfoundexception
我们是三个人开发JSF项目,我们之前没有进入过JSF.奇怪的是,从SVN检出相同的数据后,其中一个团队成员每次使用Tomcat 7.0.27都会收到404错误.
在Tomcat(在Eclipse中使用)启动时,会写出以下日志:
01.06.2012 11:45:16 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: ......
01.06.2012 11:45:16 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:SnapManCloud' did not find a matching property.
01.06.2012 11:45:16 org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
01.06.2012 11:45:16 org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
01.06.2012 11:45:16 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 677 ms
01.06.2012 11:45:16 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina …Run Code Online (Sandbox Code Playgroud) 我们有一个非常小的Web服务(少于1K行代码)由Jetty运行.即使在压力测试阶段,该服务也始终如一.但是,经过13天的正常运行时间后,我们在同一天的两个节点中遇到了ClassNotFoundException.
奇怪的是,找不到的类已经存在(它是启动例程的一部分,并且它不断用于以前的请求).事实上,只需重新启动流程即可解决问题.两个节点都在不同的机器中,并且彼此独立.它们不依赖于外部资源,除了一个JMS连接.
在谷歌搜索时我找不到相关信息,因为大多数报告的问题与启动Java进程时类路径中缺少的类有关,这不是我们的情况.我们怀疑可能存在内存泄漏,从某种程度上破坏了JVM内存,但是这无法解释为什么同一时间在两个节点中发生同样的问题.在过去的五天里,我们一直在进行密集的压力测试,连接JVM监视器和内存泄漏分析器,一切看起来都很好.对于此测试,我们将进程内存从2GB减少到512MB.
细节:
您能否就JVM突然"忘记"以前加载的类的存在而无法再次加载它的想法做出贡献?
Caused by: java.lang.ClassNotFoundException: com.a.b.c.SomeClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) ~[na:1.6.0_37]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.6.0_37]
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) ~[na:1.6.0_37]
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) ~[na:1.6.0_37]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) ~[na:1.6.0_37]
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ~[na:1.6.0_37]
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:424) ~[na:na]
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:377) ~[na:na]
at java.lang.Class.forName0(Native Method) ~[na:1.6.0_37]
at java.lang.Class.forName(Class.java:247) ~[na:1.6.0_37]
at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:95) ~[na:1.6.0_37]
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:107) ~[na:1.6.0_37]
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31) ~[na:1.6.0_37]
at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:370) ~[na:1.6.0_37]
at sun.reflect.annotation.AnnotationParser.parseClassValue(AnnotationParser.java:351) ~[na:1.6.0_37]
at …Run Code Online (Sandbox Code Playgroud) 我刚刚开始构建Java应用程序(我确实有.NET经验),我正在尝试构建一个小型测试应用程序,其整个代码是这样的:
package com.company;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Main {
public static void main(String[] args) throws SQLException {
System.out.println("Buna lume!");
SQLServerDataSource ds = new SQLServerDataSource();
ds.setIntegratedSecurity(true);
ds.setServerName("localhost");
ds.setPortNumber(1433);
ds.setDatabaseName("Test");
Connection con = ds.getConnection();
String SQL = "SELECT * FROM Test WHERE ID = ?";
PreparedStatement stmt = con.prepareStatement(SQL);
stmt.setInt(1, 2);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1) + ", " + rs.getString(2));
}
rs.close();
stmt.close();
con.close();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在IDE(IntelliJ IDEA 12.1.6社区版)中运行该应用程序,使SQL Server可用,该应用程序运行正常,它应该做到这一点. …
我目前正在使用Android Studio开发Android应用.目前,该应用程序在Lollipop设备上完美启动,但由于ClassNotFoundException在棒棒糖前设备(我已在ICS上测试并且失败),在发布时崩溃.
缺少的类总是在运行时来自外部库.
这是gradle文件:
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
android {
compileSdkVersion 23
buildToolsVersion '23.0.0'
defaultConfig {
applicationId 'com.kappsports.kapp10'
minSdkVersion 18
targetSdkVersion 23
versionCode 1
versionName '1.0.0'
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
shrinkResources true
}
}
lintOptions {
abortOnError false
}
dexOptions {
incremental true
javaMaxHeapSize '4g'
}
}
repositories {
mavenCentral()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } …Run Code Online (Sandbox Code Playgroud) android classnotfoundexception android-4.3-jelly-bean android-gradle-plugin android-5.0-lollipop
我正在尝试制作Java RMI客户端/服务器应用程序.我在启动应用程序的服务器端时遇到问题,因为当我尝试启动应用程序的服务器端时,它在调用Registry.bind()方法期间一直运行到ClassNotFoundException.
我从这里开始使用简单的教程:http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html.按照这些说明操作后,它最初抛出一个ClassNotFoundException,抱怨它无法找到"example.hello.Hello".我能够通过从教程中的destDir目录启动rmiregistry来解决这个问题,因为rmiregistry显然使用其初始起始目录作为其类路径的一部分.
之后我开始使用我的其他测试应用程序,直到我开始在服务器类中使用第三方jar文件时我才感觉良好.现在,如果我的服务器类引用任何jar文件中的任何内容,则Registry.bind()会抛出ClassNotFoundException,因为rmiregistry应用程序不知道这些jar文件.
据我所知,rmiregistry不接受任何类型的路径启动arg,所以我想知道如何告诉它我想要它承认什么类路径.根据这里的教程:http://docs.oracle.com/javase/tutorial/rmi/running.html,"你必须确保你将运行rmiregistry的shell或窗口没有设置CLASSPATH环境变量或有一个CLASSPATH环境变量,它不包含你想要下载到远程对象客户端的任何类的路径." 这听起来与我需要的相反......或者我读错了吗?有没有人有任何成功启动使用第三方jar的RMI客户端/服务器(在我的情况下,commons-io,commons-logging和rmiio)?
这是在Windows上,顺便说一下.
更新
我找到了解决方法.请参阅下面的答案.
我在Windows上运行Eclipse.
按照本教程我下载了JDBC4,使用Project> Properties> add External JAR将其添加到我的构建路径,浏览文件,它工作正常(.classpath文件显示正确的lib路径).
该包出现在我的Referenced Libraries文件夹中,因此我继续本教程.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
....
public void open ()
{
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这将是那么简单,但我开始使用这个很长的堆栈跟踪
java.lang.ClassNotFoundException: org.postgresql.Driver
Run Code Online (Sandbox Code Playgroud)
(如果需要,我可以提供更多)
我尝试过,include org.postgresql.*;但也没有帮助.我也尝试过JDBC3,但也没有运气.
我用Android查看了Driver JDBC PostgreSQL,它提供了一个模糊的答案,说我最好只使用HTTP + JSON.这是我从未使用过的.
我是Android,postgresql,web开发的新手,所以一个简单的答案将不胜感激.
我想映射字符串中的字符,但我遇到了运行时错误.
例:
object Hello {
def hello(c: Char) {
print(c)
}
def main(args: Array[String]) {
"Hello World!".map(hello)
}
}
Run Code Online (Sandbox Code Playgroud)
跟踪:
scalac Hello.scala
java Hello
Exception in thread "main" java.lang.NoClassDefFoundError: scala/LowPriorityImplicits
at Hello.main(Hello.scala)
Caused by: java.lang.ClassNotFoundException: scala.LowPriorityImplicits
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 1 more
make: *** [test] Error 1
Run Code Online (Sandbox Code Playgroud) 我在Google Play开发者控制台中不断收到此错误报告.它看起来像MultiDex错误.
java.lang.RuntimeException:
at android.app.LoadedApk.makeApplication(LoadedApk.java:516)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4514)
at android.app.ActivityThread.access$1500(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1381)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative(Native Method:0)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
at dalvik.system.NativeStart.main(Native Method:0)
Caused by: java.lang.ClassNotFoundException:
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
at android.app.Instrumentation.newApplication(Instrumentation.java:975)
at android.app.LoadedApk.makeApplication(LoadedApk.java:511)Run Code Online (Sandbox Code Playgroud)
我已经将它添加到gradle.build:
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}Run Code Online (Sandbox Code Playgroud)
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
try {
MultiDex.install(this);
}catch (RuntimeException e){
e.printStackTrace();
}catch (Exception e){ …Run Code Online (Sandbox Code Playgroud)当我在Eclipse中调试一个简单的控制台应用程序时,我在调试窗口中获得了很多ClassNotFoundException行.这不是一个错误,在另一个窗格中稍微低一些,我得到"Source not found.".我明白这是因为所需类的源代码不可用,我想跳过这些行...我必须按很多次"跳过"或"跳出"按钮才能退出这些州.
为了避免这些无用的线路我该怎么办?
谢谢
java ×5
android ×3
eclipse ×2
debugging ×1
jar ×1
jsf ×1
jvm ×1
maven ×1
maven-plugin ×1
postgresql ×1
rmi ×1
rmiregistry ×1
scala ×1
sqljdbc ×1
tomcat ×1
unit-testing ×1