javamavenjavaparser

How to add maven type solver in JavaParser


I have an AEM maven project with dependencies being injected by maven. I am using the Java Parser library to do some analysis of the code. Till now, we were manually injecting the typesolvers using the paths of the jars in the m2 repository like below

    List<TypeSolver> typeSolvers = new ArrayList<TypeSolver>();
    typeSolvers.add(new ReflectionTypeSolver());
    typeSolvers.add(new JavaParserTypeSolver(new File(projectPath + "/src/main/java")));
    for (String str : dependencies) {
        typeSolvers.add(JarTypeSolver.getJarTypeSolver(str));
    }
    TypeSolver[] tsArray = new TypeSolver[typeSolvers.size()];
    for (int i = 0; i < typeSolvers.size(); i++) {
        tsArray[i] = typeSolvers.get(i);
    }
    typeSolver = new CombinedTypeSolver(tsArray);

We were passing it the list of jar paths like below:

    List<String> dependencies = new ArrayList<>();
    dependencies.add("C:/Users/"+Utility.USER_NAME+"/.m2/repository/com/adobe/aem/uber-jar/6.2.0/uber-jar-6.2.0-apis.jar");

Now, I would like the typesolver to automatically resolve the dependency without adding the paths manually. Is there any 'Maven typesolver' like thing in Java which can help with the same.


Solution

  • So looks like it is not possible to achieve something like this directly in Java parser.

    What I ended up doing is to use org.apache.maven.model.io.xpp3.MavenXpp3Reader to parse my pom.xml file and get the list of dependencies/managed dependencies. Then I used that list to generate the path of the jar's (using the syntax <user.home>/.m2/repository/<group-id>/<artifact-id>/<version>/<artifact-id>-<version>-<classifier>.jar).

    This jar file path was then passed to JarTypeSolver.