Aw: Re: How is the best way to get an effective POM outside of a Maven Plugin?

2017-08-14 Thread sparsick
Hello,

I found a solution for my problem that I'd like to share with you. Maybe it 
helps others, too. 

JBoss's ShrinkWrap Resolver makes it possible to run Maven embedded in your 
code. I use it to run "help:effective-pom -Doutput=effective-pom.xml". Then I 
read "effective-pom.xml" with MavenXpp3Reader that was mentioned by Karl Heinz 
(thank you for that hint). This works only for poms that haven't a multi module 
list. For poms with multi module list, the Maven Help Plugin creates a 
effective-pom.xml with several  elements wrapped by a  
element. This structure isn't known by MavenXpp3Reader. 

The code snippet for that:
EmbeddedMaven.forProject("/path/to/pom.xml")
 .addProperty("output", "effective-pom.xml")
 .setGoals("help:effective-pom")
 .build();
MavenXpp3Reader pomReader = new MavenXpp3Reader();
final Model pomModel = pomReader.read(new 
FileInputStream("/path/to/effective-pom.xml"));


System.out.println(pomModel.getDistributionManagement().getDownloadUrl());

As dependencies, you need:


3.0.0-beta-2




org.jboss.shrinkwrap.resolver
shrinkwrap-resolver-api-maven-embedded
${version.shrinkwrap.resolvers}


org.jboss.shrinkwrap.resolver
shrinkwrap-resolver-impl-maven-embedded
${version.shrinkwrap.resolvers}


org.apache.maven
maven-model
3.5.0




Best regards,

Sandra

> Gesendet: Donnerstag, 10. August 2017 um 07:41 Uhr
> Von: spars...@web.de
> An: i...@soebes.de
> Cc: "Maven Users List" 
> Betreff: Aw: Re: How is the best way to get an effective POM outside of a 
> Maven Plugin?
>
> Hi Karl Heinz,
> 
> unfortunately, I need the full resolved pom.
> 
> Best regards,
> 
> Sandra Parsick
> 
> > Gesendet: Mittwoch, 09. August 2017 um 19:24 Uhr
> > Von: "Karl Heinz Marbaise" 
> > An: "Maven Users List" , spars...@web.de
> > Betreff: Re: How is the best way to get an effective POM outside of a Maven 
> > Plugin?
> >
> > Hi Sandra,
> > 
> > first question: Do you need the full resolved pom (effective pom) or 
> > would it be enough just to simply to parse the pom file which can simply 
> > being done using MavenXpp3Reader this would deliver the XML as a Maven 
> > Model class which can simply being used to extract information from the 
> > maven model...
> > 
> > Kind regards
> > Karl Heinz Marbaise
> > 
> > On 09/08/17 13:00, spars...@web.de wrote:
> > > Hello,
> > > 
> > > currently, I'm working on a small tool, that needs some information of a 
> > > POM and its parent POM. I didn't want to parse them with a XML reader, so 
> > > I found that the DefaultModelBuilder can build a complete effective POM 
> > > for me. Based on a stackoverflow answer 
> > > (https://stackoverflow.com/questions/27383357/how-do-i-instantiate-mavenresolver-for-modelbuilder-usage)
> > >   I build following example:
> > > 
> > > DefaultModelBuilderFactory factory = new DefaultModelBuilderFactory();
> > >   final DefaultModelBuilder defaultModelBuilder = factory.newInstance();
> > >   ModelBuildingRequest buildRequest = new DefaultModelBuildingRequest();
> > >   buildRequest.setPomFile(Paths.get("/path/to/a/pom.xml").toFile())
> > >   .setProcessPlugins(false)
> > >   
> > > .setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL);
> > >   final ModelBuildingResult modelBuildingResult = 
> > > defaultModelBuilder.build(buildRequest);
> > > 
> > >   
> > > It works fine for simple POM (simple means a POM without a parent 
> > > reference). But if I set a POM with a parent reference in 
> > > buildRequest.setPomFile, I get following exception:
> > > 
> > > Exception in thread "main" java.lang.IllegalArgumentException: no model 
> > > resolver provided, cannot resolve parent POM groupId:artifactId:1 for POM 
> > > groupId:artifactId:version (/path/to/a/pom.xml)
> > >   at 
> > > org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:890)
> > >   at 
> > > org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:750)
> > >   at 
> > > org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:309)
> > >   at 
> > > com.github.sparsick.maven.effecitve.pom.maven.model.builder.ApacheMavenModelBuilder.main(ApacheMavenModelBuilder.java:17)
> > > 
> > > Another example on Stackoverflow 
> > > (https://stackoverflow.com/questions/4838591/is-there-a-library-for-reading-maven2-3-pom-xml-files)
> > >  mentions to use RepositoryModelResolver from Apache Archiva as an 
> > > implementation ModelResolver. But I don't want to introduce a dependency 
> > > to Apache Archiva in my tool.
> > > 
> > > So my questions are, is the usage of DefaultModelBuilder the best way to 
> > > get an 

Aw: Re: How is the best way to get an effective POM outside of a Maven Plugin?

2017-08-09 Thread sparsick
Hi Karl Heinz,

unfortunately, I need the full resolved pom.

Best regards,

Sandra Parsick

> Gesendet: Mittwoch, 09. August 2017 um 19:24 Uhr
> Von: "Karl Heinz Marbaise" 
> An: "Maven Users List" , spars...@web.de
> Betreff: Re: How is the best way to get an effective POM outside of a Maven 
> Plugin?
>
> Hi Sandra,
> 
> first question: Do you need the full resolved pom (effective pom) or 
> would it be enough just to simply to parse the pom file which can simply 
> being done using MavenXpp3Reader this would deliver the XML as a Maven 
> Model class which can simply being used to extract information from the 
> maven model...
> 
> Kind regards
> Karl Heinz Marbaise
> 
> On 09/08/17 13:00, spars...@web.de wrote:
> > Hello,
> > 
> > currently, I'm working on a small tool, that needs some information of a 
> > POM and its parent POM. I didn't want to parse them with a XML reader, so I 
> > found that the DefaultModelBuilder can build a complete effective POM for 
> > me. Based on a stackoverflow answer 
> > (https://stackoverflow.com/questions/27383357/how-do-i-instantiate-mavenresolver-for-modelbuilder-usage)
> >   I build following example:
> > 
> > DefaultModelBuilderFactory factory = new DefaultModelBuilderFactory();
> >   final DefaultModelBuilder defaultModelBuilder = factory.newInstance();
> >   ModelBuildingRequest buildRequest = new DefaultModelBuildingRequest();
> >   buildRequest.setPomFile(Paths.get("/path/to/a/pom.xml").toFile())
> >   .setProcessPlugins(false)
> >   
> > .setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL);
> >   final ModelBuildingResult modelBuildingResult = 
> > defaultModelBuilder.build(buildRequest);
> > 
> >   
> > It works fine for simple POM (simple means a POM without a parent 
> > reference). But if I set a POM with a parent reference in 
> > buildRequest.setPomFile, I get following exception:
> > 
> > Exception in thread "main" java.lang.IllegalArgumentException: no model 
> > resolver provided, cannot resolve parent POM groupId:artifactId:1 for POM 
> > groupId:artifactId:version (/path/to/a/pom.xml)
> >   at 
> > org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:890)
> >   at 
> > org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:750)
> >   at 
> > org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:309)
> >   at 
> > com.github.sparsick.maven.effecitve.pom.maven.model.builder.ApacheMavenModelBuilder.main(ApacheMavenModelBuilder.java:17)
> > 
> > Another example on Stackoverflow 
> > (https://stackoverflow.com/questions/4838591/is-there-a-library-for-reading-maven2-3-pom-xml-files)
> >  mentions to use RepositoryModelResolver from Apache Archiva as an 
> > implementation ModelResolver. But I don't want to introduce a dependency to 
> > Apache Archiva in my tool.
> > 
> > So my questions are, is the usage of DefaultModelBuilder the best way to 
> > get an effective POM of my project outside of a Maven Plugin? If so which 
> > implementation I should use for the ModelResolver? If not what is the best 
> > way to get the effective POM outside of a Maven Plugin.
> > 
> > Thank you and best regards,
> > 
> > Sandra Parsick
> > 
> > -
> > To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
> > For additional commands, e-mail: users-h...@maven.apache.org
> > 
> > 
> 

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