You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Vincent Massol <vm...@gmail.com> on 2018/07/20 14:56:06 UTC

How to read POM dependencies from file using Maven Resolver

Hi guys,

I’ve been trying to find how to programmatically resolve dependencies from a pom.xml file by using the Maven Resolver API (https://github.com/apache/maven-resolver).

So far I’ve succeeded in resolving dependencies from an Artifact but I haven’t found how to do by reading from a pom.xml file.

The closest I have founds is the following but it’s not working & it’s not using the Resolver API (and thus the passed parameters):

private void getArtifactDependenciesFromPOMFile(List<RemoteRepository> remoteRepositories, RepositorySystem repoSystem,
    RepositorySystemSession session) throws Exception
{
    DefaultModelBuildingRequest modelBuildingRequest = new DefaultModelBuildingRequest()
        .setPomFile(new File("./pom.xml”));
    ModelBuilder modelBuilder = new DefaultModelBuilderFactory().newInstance();
    ModelBuildingResult modelBuildingResult = modelBuilder.build(modelBuildingRequest);
    Model model = modelBuildingResult.getEffectiveModel();
}

It’s failing with:

java.lang.NullPointerException: request.modelResolver cannot be null (parent POM org.xwiki.platform:xwiki-platform-test:10.6-SNAPSHOT and POM org.xwiki.platform:xwiki-platform-test-war:[unknown-version] (/Users/vmassol/dev/xwiki/xwiki-platform/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-war/./pom.xml))

	at org.apache.commons.lang3.Validate.notNull(Validate.java:225)
	at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:994)

I assume that’s because it needs some MavenResolver at:

    DefaultModelBuildingRequest modelBuildingRequest = new DefaultModelBuildingRequest()
        .setPomFile(new File("./pom.xml”))
        .setResolver(“… what to put here?…”)

Is there another approach?

Thanks
-Vincent

PS: I’ve tried using ShrinkWrap but it’s not working for me, see https://massol.myxwiki.org/xwiki/bin/view/Blog/ResolveMavenArtifactsShrinkWrap


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


Re: How to read POM dependencies from file using Maven Resolver

Posted by Vincent Massol <vi...@massol.net>.
Ok I’ve found a way but it looks complex… Please let me know if there’s a simpler way.

So I’ve copied the DefaultModelResolver.java class from maven sources (since it’s package private I couldn’t reuse it!) into my own sources, and then used what I mentioned below:

private void getArtifactDependenciesFromPOMFile(List<RemoteRepository> remoteRepositories,
    RepositorySystem repoSystem, RepositorySystemSession session) throws Exception
{
    ModelResolver resolver = new DefaultModelResolver(session, null, null, this.artifactResolver,
        this.versionRangeResolver, this.remoteRepositoryManager, remoteRepositories);

    DefaultModelBuildingRequest modelBuildingRequest = new DefaultModelBuildingRequest()
        .setPomFile(new File("./pom.xml"))
        .setModelResolver(resolver);

    ModelBuilder modelBuilder = new DefaultModelBuilderFactory().newInstance();
    ModelBuildingResult modelBuildingResult = modelBuilder.build(modelBuildingRequest);
    Model model = modelBuildingResult.getEffectiveModel();
…
}

Is that the only way?

Thanks
-Vincent

> On 20 Jul 2018, at 16:56, Vincent Massol <vm...@gmail.com> wrote:
> 
> Hi guys,
> 
> I’ve been trying to find how to programmatically resolve dependencies from a pom.xml file by using the Maven Resolver API (https://github.com/apache/maven-resolver).
> 
> So far I’ve succeeded in resolving dependencies from an Artifact but I haven’t found how to do by reading from a pom.xml file.
> 
> The closest I have founds is the following but it’s not working & it’s not using the Resolver API (and thus the passed parameters):
> 
> private void getArtifactDependenciesFromPOMFile(List<RemoteRepository> remoteRepositories, RepositorySystem repoSystem,
>    RepositorySystemSession session) throws Exception
> {
>    DefaultModelBuildingRequest modelBuildingRequest = new DefaultModelBuildingRequest()
>        .setPomFile(new File("./pom.xml”));
>    ModelBuilder modelBuilder = new DefaultModelBuilderFactory().newInstance();
>    ModelBuildingResult modelBuildingResult = modelBuilder.build(modelBuildingRequest);
>    Model model = modelBuildingResult.getEffectiveModel();
> }
> 
> It’s failing with:
> 
> java.lang.NullPointerException: request.modelResolver cannot be null (parent POM org.xwiki.platform:xwiki-platform-test:10.6-SNAPSHOT and POM org.xwiki.platform:xwiki-platform-test-war:[unknown-version] (/Users/vmassol/dev/xwiki/xwiki-platform/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-war/./pom.xml))
> 
> 	at org.apache.commons.lang3.Validate.notNull(Validate.java:225)
> 	at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:994)
> 
> I assume that’s because it needs some MavenResolver at:
> 
>    DefaultModelBuildingRequest modelBuildingRequest = new DefaultModelBuildingRequest()
>        .setPomFile(new File("./pom.xml”))
>        .setResolver(“… what to put here?…”)
> 
> Is there another approach?
> 
> Thanks
> -Vincent
> 
> PS: I’ve tried using ShrinkWrap but it’s not working for me, see https://massol.myxwiki.org/xwiki/bin/view/Blog/ResolveMavenArtifactsShrinkWrap
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org