zoukankan      html  css  js  c++  java
  • 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("");
            }
    	}
    }
    

      

      

  • 相关阅读:
    微信公众平台入门到精通-新浪云计算平台注册和使用
    PhpStorm快捷键设置/个性化设置,如何多项目共存?如何更换主题?
    10个免费的PHP编辑器/开发工具
    php利用PHPExcel类导出导入Excel用法
    PHP遍历数组的几种方法
    SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'XXX' (13)
    CentOS下Apache虚拟主机配置
    centos下vsftpd登录后无法看见文件,无法创建文件及文件夹
    Linux开启MySQL远程连接
    php禁止某ip或ip地址段访问的方法(转载)
  • 原文地址:https://www.cnblogs.com/xiaodebing/p/9164675.html
Copyright © 2011-2022 走看看