I was confused when I first looked at the code also, but on XP at least it does
work. (I stepped through it with the debugger).
The details on the problems I found are in MNG-3085, but in short sometimes the
variable is retrieved literally as "${env.M2_HOME}" so it's not resolving
correctly somewhere. This happens with the 2.0.6 and 2.0.7-SNAPSHOT invoker.
-Original Message-
From: Kenney Westerhof [mailto:[EMAIL PROTECTED]
Sent: Sunday, July 08, 2007 7:55 AM
To: Maven Developers List
Subject: Re: finding maven.home in the invoker
Brian E. Fox wrote:
> I recently had some trouble with the invoker getting a good maven.home
> value from the mvn script. I came across this code in the eclipse tests
> that seems to work pretty well. Is there any objection to moving this
> code into the invoker in a fall back scenario? (ie if the executable
> can't be found via the normal means, try this) The code is basically
> walking through the path to find mvn...in most cases a user will have
> mvn on their path so it seems like a good assumption.
The code below is bad. The system path is NOT set in java.library.path - this
is for dll/so files (jni stuff).
Assuming maven is in the path when no env var can be found is ok though,
i'm not sure why the maven home is even needed.
Btw, i already updated both the invoker and the verifier to also
check the M2_HOME env var, which should fix things on some installations.
Back to the code below. If it's changed to 'path = System.getenv( "PATH" )
it may work.
However, if you look at the 'mvn' script, it sets the maven.home variable:
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "${M2_HOME}"/lib/maven-embedder-*.jar \
"-Dclassworlds.conf=${M2_HOME}/bin/m2.conf" \
"-Dmaven.home=${M2_HOME}" \
${CLASSWORLDS_LAUNCHER} $QUOTED_ARGS
so ideally the maven.home property should just work. I don't know why it
doesn't,
but maybe we should look into that as maven just provides this information
since version 2.0.
-- Kenney
>
>
>
> String mavenHome = System.getProperty( "maven.home" );
>
>
>
> // maven.home is set by surefire when the test is run with
> maven, but better make the test run in IDEs without
>
> // the need of additional properties
>
> if ( mavenHome == null )
>
> {
>
> String path = System.getProperty( "java.library.path" );
>
> String[] paths = StringUtils.split( path,
> System.getProperty( "path.separator" ) );
>
> for ( int j = 0; j < paths.length; j++ )
>
> {
>
> String pt = paths[j];
>
> if ( new File( pt, "mvn" ).exists() )
>
> {
>
> System.setProperty( "maven.home", new File( pt
> ).getAbsoluteFile().getParent() );
>
> break;
>
> }
>
>
>
> }
>
> }
>
>
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]