Maven Junit测试用例与java.lang.NoClassDefFoundError崩溃:org/slf4j/LoggerFactory

Maven Junit测试用例与java.lang.NoClassDefFoundError崩溃:org/slf4j/LoggerFactory,java,maven,junit,dozer,Java,Maven,Junit,Dozer,我一直在尝试为一个服务实现Junit测试用例,该服务返回不同类型的资源,如下面的测试代码所示: public class Tester { MyInfoService myInfoService=null; @Before public void setUp() throws Exception{ myInfoService = new MyInfoService(); System.out.println(" @#$#@ myInfo

我一直在尝试为一个服务实现Junit测试用例,该服务返回不同类型的资源,如下面的测试代码所示:

public class Tester {

    MyInfoService myInfoService=null;

    @Before
    public void setUp() throws Exception{
        myInfoService = new MyInfoService();
        System.out.println(" @#$#@ myInfoService ="+myInfoService.getAllMyResourceTypes().size());
    }

    @Test
    public void testResTypeAll() {
        List<MyTypeInfoBean> resTypeBeanList = myInfoService.getAllMyResourceTypes();
        assertEquals("Testing size for res type...", 18, resTypeBeanList.size());
    }
}
公共类测试器{
MyInfoService MyInfoService=null;
@以前
public void setUp()引发异常{
myInfoService=新的myInfoService();
System.out.println(“@#$#@myInfoService=“+myInfoService.getAllMyResourceTypes().size());
}
@试验
public void testResTypeAll(){
List resTypeBeanList=myInfoService.getAllMyResourceTypes();
assertEquals(“测试res类型的大小…”,18,resTypeBeanList.size());
}
}
发生错误的服务类:

public class MyInfoService implements MyInfoServiceRemote {

           // some code here

            @Override
            public List<MyTypeInfoBean> getAllMyResourceTypes() {
            List<MyResourceTypeInfoDTO> resourceList = new ArrayList<>();
            List<MyTypeInfoBean> resourceListBean = new ArrayList<>();
            MyResourceTypeInfoDTO myResTypeInfoDTO = null;
            try {
            HashMap<Integer,MyConstantsUtilClass.MyResourceTypes> restypemap =      (HashMap<Integer,   MyResourceTypes>)MyConstantsUtilClass.MyResourceTypes.getRestypemap();
            Set<Map.Entry<Integer, MyConstantsUtilClass.MyResourceTypes>>   restypemapEntrySet = restypemap.entrySet();
            for (Entry<Integer, MyResourceTypes> entry : restypemapEntrySet) {
                myResTypeInfoDTO = new MyResourceTypeInfoDTO();
                // code to read the entry values and populate my DTO
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            // size gets printed, so everything is fine till now
            System.out.println("@#$#@ resourceList ="+resourceList.size());
        // The resource list is printed correctly above.The problem begins below
                Mapper mapper=null;
                if (resourceList != null) {
                    System.out.println("resourceList is not null object");
                    System.out.print("Original contents of al: ");
                    try {
                // this does not work and get a NoClassDefError
                mapper= DozerBeanMapperSingletonWrapper.getInstance();          } catch(Exception e) {
                        e.printStackTrace();
                }
                Iterator<MyResourceTypeInfoDTO> itr = resourceList.iterator();
                while (itr.hasNext()) {
                    MyResourceTypeInfoDTO element = (MyResourceTypeInfoDTO)                     itr.next();
                    if (mapper == null)
                    System.out.println("Mapper is  NULL");
                    MyTypeInfoBean beanElement = mapper.map(element, MyTypeInfoBean.class);
                    resourceListBean.add(beanElement);
                    }
            return resourceListBean;
            }
    // other methods here
    }
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at org.dozer.DozerBeanMapper.<clinit>(DozerBeanMapper.java:58)
    at org.dozer.DozerBeanMapperSingletonWrapper.getInstance(DozerBeanMapperSingletonWrapper.java:43)
at com.inv.service.MyInfoService.getAllResourceTypes(MyInfoService.java:508)
at com.bel.tropo.tester.Tester.setUp(Tester.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
<dependency>
            <groupId>net.sf.dozer</groupId>
            <artifactId>dozer</artifactId>
            <version>5.3.2</version>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
</dependency>
公共类MyInfoService实现MyInfoServiceRemote{ //这里有一些代码 @凌驾 公共列表getAllMyResourceTypes(){ List resourceList=新的ArrayList(); List resourceListBean=new ArrayList(); MyResourceTypeInfoDTO myResTypeInfoDTO=null; 试一试{ HashMap restypemap=(HashMap)MyConstantsUtilClass.MyResourceTypes.getRestypemap(); Set restypemapEntrySet=restypemap.entrySet(); for(条目:restypemapEntrySet){ myResTypeInfoDTO=新的MyResourceTypeInfoDTO(); //读取输入值并填充我的DTO的代码 } }捕获(例外e){ //TODO自动生成的捕捉块 e、 printStackTrace(); } //尺寸会打印出来,所以到现在为止一切都很好 System.out.println(“@#$#@resourceList=“+resourceList.size()”); //上面正确打印了资源列表。问题从下面开始 映射器映射器=空; if(resourceList!=null){ System.out.println(“resourceList不是空对象”); 系统输出打印(“al的原始内容:”); 试一试{ //这不起作用,会得到一个NoClassDefError mapper=DozerBeanMapperSingletonWrapper.getInstance();}catch(异常e){ e、 printStackTrace(); } 迭代器itr=resourceList.Iterator(); while(itr.hasNext()){ MyResourceTypeInfoDTO元素=(MyResourceTypeInfoDTO)itr.next(); if(映射器==null) System.out.println(“映射器为空”); MyTypeInfoBean beanElement=mapper.map(元素,MyTypeInfoBean.class); 添加(beanElement); } 返回resourceListBean; } //这里还有其他方法 } 下面是我在运行Junit测试用例时得到的错误日志:

public class MyInfoService implements MyInfoServiceRemote {

           // some code here

            @Override
            public List<MyTypeInfoBean> getAllMyResourceTypes() {
            List<MyResourceTypeInfoDTO> resourceList = new ArrayList<>();
            List<MyTypeInfoBean> resourceListBean = new ArrayList<>();
            MyResourceTypeInfoDTO myResTypeInfoDTO = null;
            try {
            HashMap<Integer,MyConstantsUtilClass.MyResourceTypes> restypemap =      (HashMap<Integer,   MyResourceTypes>)MyConstantsUtilClass.MyResourceTypes.getRestypemap();
            Set<Map.Entry<Integer, MyConstantsUtilClass.MyResourceTypes>>   restypemapEntrySet = restypemap.entrySet();
            for (Entry<Integer, MyResourceTypes> entry : restypemapEntrySet) {
                myResTypeInfoDTO = new MyResourceTypeInfoDTO();
                // code to read the entry values and populate my DTO
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            // size gets printed, so everything is fine till now
            System.out.println("@#$#@ resourceList ="+resourceList.size());
        // The resource list is printed correctly above.The problem begins below
                Mapper mapper=null;
                if (resourceList != null) {
                    System.out.println("resourceList is not null object");
                    System.out.print("Original contents of al: ");
                    try {
                // this does not work and get a NoClassDefError
                mapper= DozerBeanMapperSingletonWrapper.getInstance();          } catch(Exception e) {
                        e.printStackTrace();
                }
                Iterator<MyResourceTypeInfoDTO> itr = resourceList.iterator();
                while (itr.hasNext()) {
                    MyResourceTypeInfoDTO element = (MyResourceTypeInfoDTO)                     itr.next();
                    if (mapper == null)
                    System.out.println("Mapper is  NULL");
                    MyTypeInfoBean beanElement = mapper.map(element, MyTypeInfoBean.class);
                    resourceListBean.add(beanElement);
                    }
            return resourceListBean;
            }
    // other methods here
    }
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at org.dozer.DozerBeanMapper.<clinit>(DozerBeanMapper.java:58)
    at org.dozer.DozerBeanMapperSingletonWrapper.getInstance(DozerBeanMapperSingletonWrapper.java:43)
at com.inv.service.MyInfoService.getAllResourceTypes(MyInfoService.java:508)
at com.bel.tropo.tester.Tester.setUp(Tester.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
<dependency>
            <groupId>net.sf.dozer</groupId>
            <artifactId>dozer</artifactId>
            <version>5.3.2</version>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
</dependency>
java.lang.NoClassDefFoundError:org/slf4j/LoggerFactory
位于org.dozer.DozerBeanMapper(DozerBeanMapper.java:58)
位于org.dozer.DozerBeanMapperSingletonWrapper.getInstance(DozerBeanMapperSingletonWrapper.java:43)
位于com.inv.service.MyInfoService.getAllResourceTypes(MyInfoService.java:508)
位于com.bel.troo.tester.tester.setUp(tester.java:21)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
我的pom.xml文件正确地提到了推土机依赖项:

public class MyInfoService implements MyInfoServiceRemote {

           // some code here

            @Override
            public List<MyTypeInfoBean> getAllMyResourceTypes() {
            List<MyResourceTypeInfoDTO> resourceList = new ArrayList<>();
            List<MyTypeInfoBean> resourceListBean = new ArrayList<>();
            MyResourceTypeInfoDTO myResTypeInfoDTO = null;
            try {
            HashMap<Integer,MyConstantsUtilClass.MyResourceTypes> restypemap =      (HashMap<Integer,   MyResourceTypes>)MyConstantsUtilClass.MyResourceTypes.getRestypemap();
            Set<Map.Entry<Integer, MyConstantsUtilClass.MyResourceTypes>>   restypemapEntrySet = restypemap.entrySet();
            for (Entry<Integer, MyResourceTypes> entry : restypemapEntrySet) {
                myResTypeInfoDTO = new MyResourceTypeInfoDTO();
                // code to read the entry values and populate my DTO
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            // size gets printed, so everything is fine till now
            System.out.println("@#$#@ resourceList ="+resourceList.size());
        // The resource list is printed correctly above.The problem begins below
                Mapper mapper=null;
                if (resourceList != null) {
                    System.out.println("resourceList is not null object");
                    System.out.print("Original contents of al: ");
                    try {
                // this does not work and get a NoClassDefError
                mapper= DozerBeanMapperSingletonWrapper.getInstance();          } catch(Exception e) {
                        e.printStackTrace();
                }
                Iterator<MyResourceTypeInfoDTO> itr = resourceList.iterator();
                while (itr.hasNext()) {
                    MyResourceTypeInfoDTO element = (MyResourceTypeInfoDTO)                     itr.next();
                    if (mapper == null)
                    System.out.println("Mapper is  NULL");
                    MyTypeInfoBean beanElement = mapper.map(element, MyTypeInfoBean.class);
                    resourceListBean.add(beanElement);
                    }
            return resourceListBean;
            }
    // other methods here
    }
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at org.dozer.DozerBeanMapper.<clinit>(DozerBeanMapper.java:58)
    at org.dozer.DozerBeanMapperSingletonWrapper.getInstance(DozerBeanMapperSingletonWrapper.java:43)
at com.inv.service.MyInfoService.getAllResourceTypes(MyInfoService.java:508)
at com.bel.tropo.tester.Tester.setUp(Tester.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
<dependency>
            <groupId>net.sf.dozer</groupId>
            <artifactId>dozer</artifactId>
            <version>5.3.2</version>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
</dependency>

net.sf.推土机
而且)问题似乎没有给我一个解决方案,或者我遗漏了什么?

任何帮助都很好。

重申您对推土机的依赖性,如下所示:

<dependency>
    <groupId>net.sf.dozer</groupId>
    <artifactId>dozer</artifactId>
    <version>5.3.2</version>
</dependency>

net.sf.推土机
将SLF4J声明为可传递依赖项,以便在您从Dozer声明中删除不需要的排除项后,它将立即提供给您。


<dependency>
<groupId>
net.sf.dozer
</groupId> 
<artifactId>
dozer
</artifactId>
<version>
5.5.1
</version>
</dependency>
net.sf.推土机 推土机 5.5.1

更新dozer版本并进行maven编译/安装,除了消除排除之外,还解决了这个问题。

为什么要排除所有可传递的依赖项?@JeroenSteenbeeke我需要在pom.xml文件中明确提到它们吗?我想,只要本地或中央repo中有可用的,就不需要了。我想你误解了我的命令您不需要显式地包含它们,但是您现在所做的是显式地排除它们them@JeroenSteenbeeke很抱歉,仍然没有得到它。我该怎么做?依赖项必须位于Java VM的类路径上。仅将它们放在磁盘上是不够的。排除dozer的所有可传递依赖项对我来说没有意义。如果发生冲突,您可以排除或管理某些依赖项。命令“mvn dependency:tree”显示模块的所有依赖项。它可以帮助您分析模块。我已删除排除标记。无意中复制它是一个错误。但问题仍然存在于不同的日志中。我现在收到StaticLoggerBinder的NoClassDef FoundError。我想我可能必须将我的dozer版本降级到2.2才能工作。net.sf.dozer推土机5.5.1为我解决了这个问题,除了消除了排除。