[Maven]Getting Run time Error :java.lang.NoClassDefFoundError: org/apache/commons/ListUtils | Community
Skip to main content
GK-007
Level 9
March 3, 2016
Question

[Maven]Getting Run time Error :java.lang.NoClassDefFoundError: org/apache/commons/ListUtils

  • March 3, 2016
  • 10 replies
  • 5214 views

Hi All,

In one of our OSGI component we have used ListUtils class and also required dependencies will also be added in parent and core poms.

But we are getting run time exception "java.lang.NoClassDefFoundError: org/apache/commons/ListUtils" ,particular dependency has been downloaded into .m2 repository.

And i have searched in online not understand that pom definitions of "commons-collections" needs to be modified to make this classes available in my project.

http://stackoverflow.com/questions/28692844/why-is-maven-not-resolving-all-dependencies-for-commons-configuration

But not sure how to proceed for making these changes,if anyone come across these kind of issue,please help me.

Below dependency has been added in parent and core poms.

Parent:

<dependency>
                <groupId>commons-collections</groupId>
                <artifactId>commons-collections</artifactId>
                <version>3.2.1</version>
               <scope>provided</scope>

</dependency>

Child:

 

Thanks,

Kishore

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.

10 replies

smacdonald2008
Level 10
March 3, 2016

The best way to proceed is to see if this package can be resolved using AEM Dependency Finder: 

http://localhost:4502/system/console/depfinder

If it resolves and shows the package - then you can use the package in AEM. I installed 

acs-aem-commons-content-2.3.0-min.zip

and then entered org.apache.commons.collections.ListUtils into DF: 

<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.1</version>
    <scope>provided</scope>
</dependency>

Adobe Employee
March 3, 2016

To add to Scott's reply.  You have a provided dependency in your pom.  This means that the runtime (JDK or a container) will provide the required dependency.  AEM does not provide this OOTB, so you would have to embed it in your component, or deploy the acs-aem-commons-content package mentioned by Scott, since it provides the dependency.

Zyg

GK-007
GK-007Author
Level 9
March 4, 2016

Thanks Scott.

Just to know how this package will resolve this issue??

And also from where we can get this package?

Thanks,

Kishore

psjaison
Level 2
March 4, 2016

Hi Kishore,

1. If the dependency in pom is failing to download to m2 repository, then try downloading from http://mvnrepository.com/artifact/commons-collections/commons-collections and paste it there

2. If the dependency in pom is able to download to m2 repository, then check with scott's method ie., goto - http://localhpost:4502/system/console/depfinder

and type "org.apache.commons.collections" and check. If it is not able to resolve and no output is there, then that means that particular bundle is not present in AEM for some reason.

In the second case, You need to debug why it is happening using error.log. But i can give a temporary solution.

Goto localhost:4502/system/console/bundles, Add the jar (bundle) you downloaded from http://mvnrepository.com/artifact/commons-collections/commons-collections and install it. This will solve your issue. 

 

Few debugging steps I can suggest :

1. Try changing SCOPE 

2. Try changing VERSION

3. Try pinging Adobe Nexus (If you are using Adobe repository for downloading)from browser

 

Please let me know if any of above inputs helped

 

Thanks,

Jaison

GK-007
GK-007Author
Level 9
March 5, 2016

i have downloaded jar 

psjaison wrote...

Hi Kishore,

1. If the dependency in pom is failing to download to m2 repository, then try downloading from http://mvnrepository.com/artifact/commons-collections/commons-collections and paste it there

2. If the dependency in pom is able to download to m2 repository, then check with scott's method ie., goto - http://localhpost:4502/system/console/depfinder

and type "org.apache.commons.collections" and check. If it is not able to resolve and no output is there, then that means that particular bundle is not present in AEM for some reason.

In the second case, You need to debug why it is happening using error.log. But i can give a temporary solution.

Goto localhost:4502/system/console/bundles, Add the jar (bundle) you downloaded from http://mvnrepository.com/artifact/commons-collections/commons-collections and install it. This will solve your issue. 

 

Few debugging steps I can suggest :

1. Try changing SCOPE 

2. Try changing VERSION

3. Try pinging Adobe Nexus (If you are using Adobe repository for downloading)from browser

 

Please let me know if any of above inputs helped

 

Thanks,

Jaison

 

 

Dependecy is already presented able to see it from 'depfinder' but not required class is not getting reflected when that piece of code is execute.

Thanks,

Kishore

smacdonald2008
Level 10
March 6, 2016

For us to try and solve this - we need to reproduce your code. Can you paste part of it that uses this class in an AEM service. 

GK-007
GK-007Author
Level 9
March 6, 2016

We are using sum() method of ListUtils class.Below line of code is responsible for this.

List<String> searchIndexMemberFirmList = ListUtils.sum(sitemapMemberFirmsList, snpMemberFirmsList);

FYI... Currently our application is running on AEM 6.0 instance

Thanks,

Kishore

smacdonald2008
Level 10
March 6, 2016

I am testing this to see if I get the same results if i use this API in an AEM service - will post back my results. 

smacdonald2008
Level 10
March 6, 2016

We tested this API in an AEM Service and it worked perfectly. For tested purposes - I executed this Java code:

 

package foo.service.impl;

import foo.service.listService;

 


import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;

import org.apache.commons.collections.CollectionUtils; 
import org.apache.commons.collections.ListUtils; 


import java.util.Collections; 
import java.util.List; 
 
 
//This is a component so it can provide or consume services
@Component
  
@Service
public class listServiceImpl implements listService {

     //Define a class member named key
    private int key = 0 ; 
     
    @Override
    //A basic setter method that sets key
    public void setKey(int val)
    {
        //Set the key class member
        this.key = val ; 
          
    }
 
    @Override
    //A basic getter that gets key
    public String getKey()
    {
        //return the value of the key class member
          
        //Convert the int to a String to display it within an AEM web page
        String strI = Integer.toString(this.key);
        
        List ii = return_empty_list_java ();
        return "The size of the list is " + ii.size(); 
    }

 

    public List return_empty_list_java () { 
           
         List<String> emptyList = ListUtils.EMPTY_LIST;
         
         return emptyList; 
         } 

 


}

__96
Level 4
March 7, 2016

As Smac rightly pointed you have issues with the provided written there. There are some ways to resolve . Like either you can deploy the bundle commons-collections by your own in felix console which I wouldn't prefer or what you can do is try to embed that jar inside your pom like 

<Embed-Dependency>commons-collections;scope=compile;scope=compile</Embed-Dependency>

Also please change the scope from provided to compile.

Please try this out and let us know.

Regards,

Samir