Notes

NOTE: This page contains drafts of user contributed FAQ entries. The content you see here might not be fully fool-proof or might not comply with the best practices promoted by Maven. What is only guaranteed is that they have worked once for some members. It is best to treat these items as "works in progress" until they have been reviewed and promoted to the main Maven documentation site.

Users may also list questions here that they would like answered. So this page can serve as a collection of questions that users would like answered. Please put unanswered questions at the bottom. Please follow the format that is being used because it will help in our automated exaction of material which can then be incorporated into the main site.

Answered Questions

How do I resolve the "<plugin name> does not exist or no valid version" error?

This means that Maven is unable to access the required plugin from your local repository, and unable to access the official or 'central' Maven2 plugin repository.

You may troubleshoot the problem by performing the following actions:

  1. If you are behind a http proxy, please check the Maven2 proxy settings guide.
  2. Try running with -U - this will force an update check on all plugins. This is often necessary if upgrading Maven from a pre-beta release.

If the problem still persists you may seek help from the Maven user list, browse archived discussions, or log a ticket describing your problem if you think you have found a bug. Tickets could also be issued for feature enhancement requests, and other tasks.

How do I install a file in my local repository along with a generic POM?

This solution requires at least 2.0.1-SNAPSHOT or above version of Maven 2. You may do this by typing this command (please take note that this is a single line only).

mvn install:install-file
      -DgroupId=<group-id>
      -DartifactId=<artifact-id>
      -Dversion=<version>
      -Dfile=<path-to-file>
      -Dpackaging=<packaging> (i.e. jar)
      -DgeneratePom=true

 

 

This command installs the jar in your local repository with the generated generic pom.

How do I install a file in my local repository along with my customized POM?

The solution requires at least 2.0.1-SNAPSHOT or above version of Maven 2 and add the -DpomFile=<path-to-pom> parameter just like the sample below.

mvn install:install-file
      -DgroupId=<group-id>
      -DartifactId=<artifact-id>
      -Dversion=<version>
      -Dfile=<path-to-file>
      -Dpackaging=<packaging> (i.e. jar)
      -DpomFile=<path-to-pom>

 

 

This command will install the file in your local repository along with your customed pom.

How do I include/exclude the other modules in the navigation menu in the parent site?

http://jira.codehaus.org/browse/MNG-661, provides a simple patch which provides parent and module links using the project URLs which as you
correctly point out only work when the site is deployed.

Where is the other plugin?

If you cannot find a certain plugin, you may want to take a look on the following sites.

  1. http://mojo.codehaus.org
  2. https://svn.codehaus.org/mojo/trunk/mojo
  3. https://svn.codehaus.org/mojo/trunk/mojo/mojo-sandbox

Does Maven 2.x support pre/postGoals?

Maven 2.x no longer supports pre/postGoals, which were used in Maven 1.x to inject custom behavior to the build process. This caused a problem, since declaring your code to be a preGoal of some other goal meant that you depended on that specific goal, rather than the work it did. It also caused confusion when trying to inject other behavior into a build that already had pre/postGoals attached: Where would the new behavior be injected?

Pre- and post-goals in Maven 1.x were usually used to develop the concept of a workflow, or lifecycle, for the build, where x happened before y, which had to happen before the sources could be compiled. In Maven 2, we've incorporated this concept of a build lifecycle natively. The steps - or phases - in this lifecycle correspond to the types of actions that might occur in a build. Your plugin can declare which type of action it performs - or which phase it should bind to - and that will guarantee it is executed before the next action type. For example, if your plugin generates some source code, you might want it to bind to the "generate-sources" lifecycle phase, so it is guaranteed to run before the "compile" phase.

For more information, see:

What is the difference between Maven and Ivy?

For a comparison of Maven's features vs Ivy's you can refer to our feature comparison

How do I get a plug-in's dependencies from a Mojo?

public class MyMojo
    extends AbstractMojo
{
    /**
     * @parameter expression="${plugin.artifacts}"
     * @required
     */
    private List pluginArtifacts;

    public void execute()
        throws MojoExecutionException
    {
        ...
        for ( Iterator i = pluginArtifacts.iterator(); i.hasNext(); )
        {
            Artifact pluginArtifact = (Artifact) i.next();
        }
        ...
    }
}

 

 

How do I get the project's sources from a Mojo?

public class MyMojo
    extends AbstractMojo
{
    /**
     * @parameter expression="${project.compileSourceRoots}"
     * @required
     */
    private List sourceRoots;

    public void execute()
        throws MojoExecutionException
    {
        ...
        for ( Iterator i = sourceRoots.iterator(); i.hasNext(); )
        {
            String sourceRoot = (String) i.next();

           // Do what you want with these directories
        }
    }
}

 

 

Does the v4.0.0 POM include a <versions/> element?

The POM is meant to be current state, not history. We actually only record the versions in the repository, and if the SCM tag is populated in the <scm> section of the POM for each released version you can reconstruct the information.

There were other issues with putting history in the POM: forgetting to add it, getting the right level of information when you work on multiple branches, and similar things.

How do I create a report that does not require Doxia's Sink interface?

Make it a report and override the isExternalReport() method to return true. Then you don't need to use the Sink at all.