Hi! 

I'm new to Maven and I've been struggling with this for a while. I just need
to be able to programmatically build a project from a pom file in order to
retrieve its relevant information. I am not using, nor want to, a maven
plugin, just need this functionality as part of my application.

I've tried the code you successfully got to work but no luck so far. I still
get the "mavenTools: null" from the repositoryManager being null. Am I
missing something? Should I run this on some kind of special environment?

I'd appreciate any help as I'm really lost here.

Thanks in advance.


Max Spring wrote
> Yes, having a projectBuilder in the Mojo did the trick.
> Thank you!
> The complete working example is down below.
> -Max
> 
> package org.example;
> 
> import java.io.File;
> 
> import org.apache.maven.model.Model;
> import org.apache.maven.model.building.ModelBuildingRequest;
> import org.apache.maven.plugin.AbstractMojo;
> import org.apache.maven.plugin.MojoExecutionException;
> import org.apache.maven.project.DefaultProjectBuildingRequest;
> import org.apache.maven.project.MavenProject;
> import org.apache.maven.project.ProjectBuilder;
> import org.apache.maven.project.ProjectBuildingResult;
> import org.sonatype.aether.RepositorySystemSession;
> 
> /**
>   * run with: mvn $groupId:$artifactId:$version:fetch-pom
> -DpomFile=$pomFile
>   *
>   * @goal fetch-pom
>   */
> public class FetchModelMojo extends AbstractMojo{
> 
>    /**
>     * Current repository/network configuration of Maven.
>     * @parameter default-value="${repositorySystemSession}"
>     * @readonly
>     */
>    private RepositorySystemSession repoSession;
> 
>    /**
>     * @component
>     */
>    private ProjectBuilder projectBuilder;
> 
>    /**
>     * @parameter expression="${pomFile}" default-value=""
>     */
>    private String pomFile;
> 
>    public void execute() throws MojoExecutionException {
>      try {
>        DefaultProjectBuildingRequest req = new
> DefaultProjectBuildingRequest();
>        req.setRepositorySession(repoSession);
>       
> req.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_STRICT);
>        ProjectBuildingResult res = projectBuilder.build(new
> File(pomFile),req);
> 
>        // do something with the project
>        MavenProject prj = res.getProject();
>        System.out.println("prj=" + prj);
>        Model model = prj.getModel();
>        System.out.println("id="+model.getId());
>      } catch (Exception e) {
>        throw new MojoExecutionException(e.getMessage(), e);
>      }
>    }
> }
> 
> 
> On 02/10/2012 01:19 PM, Olivier Lamy wrote:
>> Hello,
>>
>> You must probably use:
>>
>>      /**
>>       * @component
>>       */
>>      private ProjectBuilder projectBuilder;
>>
>> 2012/2/10 Max Spring<

> m2spring@

> >:
>>> I'm running into the same "mavenTools: null" problem, but my code sits
>>> in a
>>> Maven 3.0.3 mojo:
>>>
>>>   public class MyMojo extends AbstractMojo{
>>>
>>>     /** @parameter default-value="${repositorySystemSession}" */
>>>     private RepositorySystemSession repoSession;
>>>
>>>     public void execute() throws MojoExecutionException{
>>>       DefaultProjectBuilder builder = new DefaultProjectBuilder();
>>>       DefaultProjectBuildingRequest req = new
>>> DefaultProjectBuildingRequest();
>>>       req.setRepositorySession(repoSession);
>>>       builder.build(new File("my-pom.xml"),req);
>>>
>>>       MavenProject prj = req.getProject();
>>>       Model model = prj.getModel();
>>>     }
>>>   }
>>>
>>> It barfs with
>>>
>>>   Caused by: java.lang.IllegalArgumentException: mavenTools: null
>>>     at org.apache.maven.project.MavenProject.
> <init>
> (MavenProject.java:249)
>>>     at
>>> org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:128)
>>>     at
>>> org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:102)
>>>     at MyMojo.execute(MyMojo.java:59)
>>>
>>> This is because repositorySystem in DefaultProjectBuilder is null, i.e.
>>> hasn't been injected:
>>>
>>>     @Requirement
>>>     private RepositorySystem repositorySystem;
>>>
>>> How can I get the right repositorySystem injected?
>>>
>>> Context:
>>> I'm essentially trying to do the M2E "Import Project" use case, but
>>> completely outside of Eclipse.
>>> I want to populate a workspace using the SCM pointer given by a POM
>>> fetched
>>> from the group repository.
>>>
>>> Thanks!
>>> -Max
>>>
>>>
>>> On 10/18/2011 04:59 AM, Barrie Treloar wrote:
>>>>
>>>> On Tue, Oct 18, 2011 at 10:02 PM, deusaquilus&lt;

> deusaquilus@

> &gt;
>>>>   wrote:
>>>>>
>>>>> Here's what I'm doing:
>>>>>
>>>>> File pom = new File("pom.xml");
>>>>> DefaultProjectBuildingRequest request = new
>>>>> DefaultProjectBuildingRequest();
>>>>> DefaultProjectBuilder builder = new DefaultProjectBuilder();
>>>>>
>>>>> String mavenHome = System.getenv("M2_HOME");
>>>>> ArtifactRepository localRepository = new MavenArtifactRepository(
>>>>>         "local",
>>>>>         new File(mavenHome +
>>>>> "/repository").toURI().toURL().toString(),
>>>>>         new DefaultRepositoryLayout(),
>>>>>         new ArtifactRepositoryPolicy(),
>>>>>         new ArtifactRepositoryPolicy());
>>>>> request.setLocalRepository(localRepository);
>>>>> MavenProject project = builder.build(pom, request).getProject();
>>>>> Properties properties = project.getProperties();
>>>>>
>>>>> Trouble is it's giving me errors with "mavenTools: null"
>>>>
>>>>
>>>> I'd be surprised if that worked.
>>>>
>>>> Maven makes heavy use of dependency injection via Plexus and chances
>>>> are you haven't set up some component that is being used.
>>>>
>>>> What is your actual use case.  I dont see why you would want to expose
>>>> Maven properties as a Java properties object...
>>>>
>>>> ---------------------------------------------------------------------





--
View this message in context: 
http://maven.40175.n5.nabble.com/Programmatically-get-maven-properties-tp4912280p5780906.html
Sent from the Maven - Users mailing list archive at Nabble.com.

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

Reply via email to