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 <project> elements wrapped by a <projects> 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: <properties> <version.shrinkwrap.resolvers>3.0.0-beta-2</version.shrinkwrap.resolvers> </properties> <dependencies> <dependency> <groupId>org.jboss.shrinkwrap.resolver</groupId> <artifactId>shrinkwrap-resolver-api-maven-embedded</artifactId> <version>${version.shrinkwrap.resolvers}</version> </dependency> <dependency> <groupId>org.jboss.shrinkwrap.resolver</groupId> <artifactId>shrinkwrap-resolver-impl-maven-embedded</artifactId> <version>${version.shrinkwrap.resolvers}</version> </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-model</artifactId> <version>3.5.0</version> </dependency> </dependencies> Best regards, Sandra > Gesendet: Donnerstag, 10. August 2017 um 07:41 Uhr > Von: spars...@web.de > An: i...@soebes.de > Cc: "Maven Users List" <users@maven.apache.org> > 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" <khmarba...@gmx.de> > > An: "Maven Users List" <users@maven.apache.org>, 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 > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@maven.apache.org For additional commands, e-mail: users-h...@maven.apache.org