• java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter


      今天想写个随笔,最近经常遇到使用junit的时候报java.lang.NoClassDefFoundError,今天算是恍然大悟了,原来junit虽然在gradle里面配置了,也在Project and External Dependencies中看到了junit的jar包,并能在这个junit的jar包里面找到org/junit/runner/manipulation/Filter这个类,但是run as junit test的时候就偏偏要报java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter。

      以为是gradle配置问题,testImplementation、implementation、api都不行  

      后来想想,出现这种情况无外乎gradle中引入的jar包(即Project and External Dependencies中的jar包)在run as junit test的时候并没有被jvm加载,所以才会出现这种现象,解决办法就是在build path 中add library,加入junit

      下面附上在main里面打出已加载的class:

    package proxy;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Proxy;
    import java.util.Vector;
    
    import org.junit.Test;
    
    /**
    * Created by 136187300@qq.com on 2018年6月9日.
    */
    
    public class TestProxy {
    
    	@Test
    	public void test1() {
    		
    		TestLog testLog = new TestLogImpl();
    		TestLogInterceptor testLogInterceptor = new TestLogInterceptor();
    		testLogInterceptor.setTarget(testLog);
    		TestLog proxy = (TestLog)Proxy.newProxyInstance(testLog.getClass().getClassLoader()
    				, testLog.getClass().getInterfaces(), testLogInterceptor);
    		proxy.print();
    	}
    	
    	public static void main(String[] args) {
    		TestLog testLog = new TestLogImpl();
    		TestLogInterceptor testLogInterceptor = new TestLogInterceptor();
    		testLogInterceptor.setTarget(testLog);
    		TestLog proxy = (TestLog)Proxy.newProxyInstance(testLog.getClass().getClassLoader()
    				, testLog.getClass().getInterfaces(), testLogInterceptor);
    		proxy.print();
    		try {
    			new TestProxy().printClass();
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    	public void printClass() throws Exception {
    		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
            Class cla = classLoader.getClass();
            while (cla != ClassLoader.class)
                cla = cla.getSuperclass();
            Field field = cla.getDeclaredField("classes");
            field.setAccessible(true);
            Vector v = (Vector) field.get(classLoader);
            for (int i = 0; i < v.size(); i++) {
                System.out.print(((Class)v.get(i)).getName()+",");
                if(i%10 == 0)System.out.println("");
            }
    	}
    }
    

      

      

  • 相关阅读:
    虚拟机中按键切回windows系统界面快捷键
    余数
    质数(素数)判断代码实现
    =excel========》函数使用
    python 正则表达式规则
    linux常用命令详解
    c指针
    visual studio 2015 开发时常见问题的解决方案
    python装饰器
    构造方法
  • 原文地址:https://www.cnblogs.com/xiaodebing/p/9164675.html
Copyright © 2020-2023  润新知