You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Jochen Wiedmann <jo...@gmail.com> on 2005/12/23 10:55:36 UTC

Maven debugging HOWTO

Hi,

it took me some time to figure this out, so it seems worth sharing.

Jochen

--
Often it does seem a pity that Noah and his party did not miss the
boat. (Mark Twain)


Maven Debugging HOWTO
===================

When looking for bugs in Maven itself or plugins, it saves a real lot of time,
if you can run Maven in a debugger. Fortunately, this is a relatively
trivial task,
if you know what to do.

1.) Invoking Maven from the command line
------------------------------------------------------------

Basically, your debugger should execute the following command line.

   M2_HOME=/usr/local/maven-2.0.1
   # Or whatever you have as Maven home
   # use set M2_HOME=... on Windows

   M2_REPO=/home/jochen/.m2/repository
   # Or whatever you have as Maven repository
   # use set M2_REPO=... on Windows

   CW=$M2_REPO/classworlds/classworlds/1.1-alpha-2/classworlds-
1.1-alpha-2.jar
   # The version number may depend on the Maven version.
   # Check your "mvn" script, if you are in doubt.
   # Use set CW=%M2_REPO%/... on Windows

   ARGS=-Dclassworlds.conf=$M2_HOME/bin/m2.conf -Dmaven.home=$M2_HOME
   # Use set ARGS=-Dclassworlds.conf=%M2_HOME%/... on Windows

   java -cp $CW $ARGS org.codehaus.classworlds.Launcher <goals>
   # Use java -cp %CW% ... on Windows


2.) Using an IDE
------------------------

Basically, it should be easy to translate the above command line into
your IDE's settings.
In what follows, I'll describe the Eclipse IDE as an example.

However, there's one imortant Gotcha, which you should be aware of: In
the above example, the initial classpath contains the classworlds jar
file - and nothing else! Your IDE will typically suggest a larger
classpath. For example, if you have a "Maven" project, it will suggest
to put this project and its dependencies on the classpath. But that
will most likely fail.

The reason is, that the projects dependencies will typically contain
multiple instances of the same dependency. For example, with Maven
2.0.1 you will have plexus-utils 1.0.4 as well as plexus-utils-1.0.5.
This is no problem, if you are using the class loaders that Maven
creates for you. It won't work, if the IDE creates class loaders: For
example, depending on the order of dependencies, only version 1.0.4
will be used, even if some classes depend on
1.0.5.

In other words: Before starting the IDE's debugger, make sure that the
class path contains the boot class loader and the classworlds.jar
file, but nothing else.


3.) Example: The Eclipse IDE
-------------------------------------------

- Make sure, that the Maven 2 Eclipse Plugin is installed. See
    http://maven.apache.org/eclipse-plugin.html
  for installing the plugin.
- Checkout the following projects from SVN.
    Maven: http://svn.apache.org/repos/asf/maven/components/tags/maven-2.0.1/

  If you need plugin parents, checkout other projects as well, for example

    Plugins: http://svn.apache.org/repos/asf/maven/plugins/trunk

  Note, that I did *not* checkout the Maven trunk. That rarely pays. Typically,
  you'll find differences in the plugin versions which are being used.

  Unfortunately, tags like Maven 2.0.1 are valid for the Maven core only. There
  are no such tags for the various plugins. This makes it sometimes rather
  difficult to have the right plugin sources. (Hint to the Maven developers!)

- Use the Maven 2 plugin to enable that these projects are Maven projects.

- Initially, invoke the "bootstrap" script in the Maven root directory.

- Select Run/Run... in the menu. A window opens.
- Select "Java Application" and press the "New" button.
- Set the new debugging profiles name, for example "Maven".
- Enter the "Main class": org.codehaus.classworlds.Launcher
  Do not attempt to use the "Search" button: It doesn't show main classes in
  dependencies.
- Switch to "Arguments".
- In "Program arguments", enter the goals you want to use, plus properties
  you want to set.
- In "VM arguments", enter the "-Dclassworlds.conf=...  -Dmaven.home=..."
  arguments from 1.)
- Select "Working directory/Other", and your projects base directory. (Where
  you would typically invoke "mvn" from.)
- Switch to "Classpath"
- Remove all "User Entries". In particular, remove your project, and the
  Maven projects, if they should be there.
- Add the classworlds jar file from 1.) to "User Entries".
- Switch to "Source Path".
- You may safely add your own projects, the Maven projects, plugin projects,
  and whatever you like, here.

That's it. Press "Run" and watch Maven running.

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


Re: Maven debugging HOWTO

Posted by Carlos Sanchez <ca...@apache.org>.
There's a easiest (I think) way using remote debugging

export MAVEN_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

and in eclipse run - debug - new - remote java application
port is the 5005 specified before

Then you run mvn and hit debug in eclipse

If somebody creates a document and open an issue this can be added to the docs

Regards

On 12/23/05, Jochen Wiedmann <jo...@gmail.com> wrote:
> Hi,
>
> it took me some time to figure this out, so it seems worth sharing.
>
> Jochen
>
> --
> Often it does seem a pity that Noah and his party did not miss the
> boat. (Mark Twain)
>
>
> Maven Debugging HOWTO
> ===================
>
> When looking for bugs in Maven itself or plugins, it saves a real lot of time,
> if you can run Maven in a debugger. Fortunately, this is a relatively
> trivial task,
> if you know what to do.
>
> 1.) Invoking Maven from the command line
> ------------------------------------------------------------
>
> Basically, your debugger should execute the following command line.
>
>    M2_HOME=/usr/local/maven-2.0.1
>    # Or whatever you have as Maven home
>    # use set M2_HOME=... on Windows
>
>    M2_REPO=/home/jochen/.m2/repository
>    # Or whatever you have as Maven repository
>    # use set M2_REPO=... on Windows
>
>    CW=$M2_REPO/classworlds/classworlds/1.1-alpha-2/classworlds-
> 1.1-alpha-2.jar
>    # The version number may depend on the Maven version.
>    # Check your "mvn" script, if you are in doubt.
>    # Use set CW=%M2_REPO%/... on Windows
>
>    ARGS=-Dclassworlds.conf=$M2_HOME/bin/m2.conf -Dmaven.home=$M2_HOME
>    # Use set ARGS=-Dclassworlds.conf=%M2_HOME%/... on Windows
>
>    java -cp $CW $ARGS org.codehaus.classworlds.Launcher <goals>
>    # Use java -cp %CW% ... on Windows
>
>
> 2.) Using an IDE
> ------------------------
>
> Basically, it should be easy to translate the above command line into
> your IDE's settings.
> In what follows, I'll describe the Eclipse IDE as an example.
>
> However, there's one imortant Gotcha, which you should be aware of: In
> the above example, the initial classpath contains the classworlds jar
> file - and nothing else! Your IDE will typically suggest a larger
> classpath. For example, if you have a "Maven" project, it will suggest
> to put this project and its dependencies on the classpath. But that
> will most likely fail.
>
> The reason is, that the projects dependencies will typically contain
> multiple instances of the same dependency. For example, with Maven
> 2.0.1 you will have plexus-utils 1.0.4 as well as plexus-utils-1.0.5.
> This is no problem, if you are using the class loaders that Maven
> creates for you. It won't work, if the IDE creates class loaders: For
> example, depending on the order of dependencies, only version 1.0.4
> will be used, even if some classes depend on
> 1.0.5.
>
> In other words: Before starting the IDE's debugger, make sure that the
> class path contains the boot class loader and the classworlds.jar
> file, but nothing else.
>
>
> 3.) Example: The Eclipse IDE
> -------------------------------------------
>
> - Make sure, that the Maven 2 Eclipse Plugin is installed. See
>     http://maven.apache.org/eclipse-plugin.html
>   for installing the plugin.
> - Checkout the following projects from SVN.
>     Maven: http://svn.apache.org/repos/asf/maven/components/tags/maven-2.0.1/
>
>   If you need plugin parents, checkout other projects as well, for example
>
>     Plugins: http://svn.apache.org/repos/asf/maven/plugins/trunk
>
>   Note, that I did *not* checkout the Maven trunk. That rarely pays. Typically,
>   you'll find differences in the plugin versions which are being used.
>
>   Unfortunately, tags like Maven 2.0.1 are valid for the Maven core only. There
>   are no such tags for the various plugins. This makes it sometimes rather
>   difficult to have the right plugin sources. (Hint to the Maven developers!)
>
> - Use the Maven 2 plugin to enable that these projects are Maven projects.
>
> - Initially, invoke the "bootstrap" script in the Maven root directory.
>
> - Select Run/Run... in the menu. A window opens.
> - Select "Java Application" and press the "New" button.
> - Set the new debugging profiles name, for example "Maven".
> - Enter the "Main class": org.codehaus.classworlds.Launcher
>   Do not attempt to use the "Search" button: It doesn't show main classes in
>   dependencies.
> - Switch to "Arguments".
> - In "Program arguments", enter the goals you want to use, plus properties
>   you want to set.
> - In "VM arguments", enter the "-Dclassworlds.conf=...  -Dmaven.home=..."
>   arguments from 1.)
> - Select "Working directory/Other", and your projects base directory. (Where
>   you would typically invoke "mvn" from.)
> - Switch to "Classpath"
> - Remove all "User Entries". In particular, remove your project, and the
>   Maven projects, if they should be there.
> - Add the classworlds jar file from 1.) to "User Entries".
> - Switch to "Source Path".
> - You may safely add your own projects, the Maven projects, plugin projects,
>   and whatever you like, here.
>
> That's it. Press "Run" and watch Maven running.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>

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


Re: Maven debugging HOWTO

Posted by Anonimac Anonimac <ni...@gmail.com>.
Jochen,
thank you for this. I tried with embedder(didn't work), so this will really
help me.


On 12/23/05, Jochen Wiedmann <jo...@gmail.com> wrote:
>
> Hi,
>
> it took me some time to figure this out, so it seems worth sharing.
>
> Jochen
>
> --
> Often it does seem a pity that Noah and his party did not miss the
> boat. (Mark Twain)
>
>
> Maven Debugging HOWTO
> ===================
>
> When looking for bugs in Maven itself or plugins, it saves a real lot of
> time,
> if you can run Maven in a debugger. Fortunately, this is a relatively
> trivial task,
> if you know what to do.
>
> 1.) Invoking Maven from the command line
> ------------------------------------------------------------
>
> Basically, your debugger should execute the following command line.
>
>    M2_HOME=/usr/local/maven-2.0.1
>    # Or whatever you have as Maven home
>    # use set M2_HOME=... on Windows
>
>    M2_REPO=/home/jochen/.m2/repository
>    # Or whatever you have as Maven repository
>    # use set M2_REPO=... on Windows
>
>    CW=$M2_REPO/classworlds/classworlds/1.1-alpha-2/classworlds-
> 1.1-alpha-2.jar
>    # The version number may depend on the Maven version.
>    # Check your "mvn" script, if you are in doubt.
>    # Use set CW=%M2_REPO%/... on Windows
>
>    ARGS=-Dclassworlds.conf=$M2_HOME/bin/m2.conf -Dmaven.home=$M2_HOME
>    # Use set ARGS=-Dclassworlds.conf=%M2_HOME%/... on Windows
>
>    java -cp $CW $ARGS org.codehaus.classworlds.Launcher <goals>
>    # Use java -cp %CW% ... on Windows
>
>
> 2.) Using an IDE
> ------------------------
>
> Basically, it should be easy to translate the above command line into
> your IDE's settings.
> In what follows, I'll describe the Eclipse IDE as an example.
>
> However, there's one imortant Gotcha, which you should be aware of: In
> the above example, the initial classpath contains the classworlds jar
> file - and nothing else! Your IDE will typically suggest a larger
> classpath. For example, if you have a "Maven" project, it will suggest
> to put this project and its dependencies on the classpath. But that
> will most likely fail.
>
> The reason is, that the projects dependencies will typically contain
> multiple instances of the same dependency. For example, with Maven
> 2.0.1 you will have plexus-utils 1.0.4 as well as plexus-utils-1.0.5.
> This is no problem, if you are using the class loaders that Maven
> creates for you. It won't work, if the IDE creates class loaders: For
> example, depending on the order of dependencies, only version 1.0.4
> will be used, even if some classes depend on
> 1.0.5.
>
> In other words: Before starting the IDE's debugger, make sure that the
> class path contains the boot class loader and the classworlds.jar
> file, but nothing else.
>
>
> 3.) Example: The Eclipse IDE
> -------------------------------------------
>
> - Make sure, that the Maven 2 Eclipse Plugin is installed. See
>     http://maven.apache.org/eclipse-plugin.html
>   for installing the plugin.
> - Checkout the following projects from SVN.
>     Maven:
> http://svn.apache.org/repos/asf/maven/components/tags/maven-2.0.1/
>
>   If you need plugin parents, checkout other projects as well, for example
>
>     Plugins: http://svn.apache.org/repos/asf/maven/plugins/trunk
>
>   Note, that I did *not* checkout the Maven trunk. That rarely pays.
> Typically,
>   you'll find differences in the plugin versions which are being used.
>
>   Unfortunately, tags like Maven 2.0.1 are valid for the Maven core only.
> There
>   are no such tags for the various plugins. This makes it sometimes rather
>   difficult to have the right plugin sources. (Hint to the Maven
> developers!)
>
> - Use the Maven 2 plugin to enable that these projects are Maven projects.
>
> - Initially, invoke the "bootstrap" script in the Maven root directory.
>
> - Select Run/Run... in the menu. A window opens.
> - Select "Java Application" and press the "New" button.
> - Set the new debugging profiles name, for example "Maven".
> - Enter the "Main class": org.codehaus.classworlds.Launcher
>   Do not attempt to use the "Search" button: It doesn't show main classes
> in
>   dependencies.
> - Switch to "Arguments".
> - In "Program arguments", enter the goals you want to use, plus properties
>   you want to set.
> - In "VM arguments", enter the "-Dclassworlds.conf=...  -Dmaven.home=..."
>   arguments from 1.)
> - Select "Working directory/Other", and your projects base directory.
> (Where
>   you would typically invoke "mvn" from.)
> - Switch to "Classpath"
> - Remove all "User Entries". In particular, remove your project, and the
>   Maven projects, if they should be there.
> - Add the classworlds jar file from 1.) to "User Entries".
> - Switch to "Source Path".
> - You may safely add your own projects, the Maven projects, plugin
> projects,
>   and whatever you like, here.
>
> That's it. Press "Run" and watch Maven running.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>