+1

On Feb 21, 2015, at 12:24 PM, Robert Scholte <[email protected]> wrote:

> multiModuleProjectDirectory sounds indeed good enough
> 
> Op Sat, 21 Feb 2015 17:48:10 +0100 schreef Igor Fedorenko 
> <[email protected]>:
> 
>> Not sure. "top level" and "base" don't sound that much different to me.
>> And, frankly, don't add much clarify to the term either. Maybe it should
>> be "multiModuleProjectDirectory", i.e. without "base" or "top level"
>> adjective?
>> 
>> 
>> --
>> Regards,
>> Igor
>> 
>> 
>> On 2015-02-21 11:27, Robert Scholte wrote:
>>> It's lengthly, but indeed better. And now that we don't care about its
>>> length, how about TopLevelDirectory instead of BaseDirectory, just to
>>> reflect that it is has nothing to with the location of uber
>>> module-parent like in a flattened multimodule structure?
>>> 
>>> Robert
>>> 
>>> 
>>> Op Sat, 21 Feb 2015 16:44:24 +0100 schreef Igor Fedorenko
>>> <[email protected]>:
>>> 
>>>> Correct. What I called "projectBaseDirectory" represents root directory
>>>> of a multimodule project. It is not related to parent/child relationship
>>>> among project modules. And it is not the same as "reactor base
>>>> directory" as it is currently implemented, but I agree reactor build
>>>> should behave like you describe.
>>>> 
>>>> I think multiModuleProjectBaseDirectory properly reflects the concept I
>>>> am trying to introduce and will change the code unless somebody objects.
>>>> 
>>>> --
>>>> Regards,
>>>> Igor
>>>> 
>>>> On 2015-02-21 9:49, Jason van Zyl wrote:
>>>>> Technically the reactor right now are the projects in modules from
>>>>> where you start the build.
>>>>> 
>>>>> I think what this variable is trying to represent is the base
>>>>> directory of the multi-module project. I would argue that,
>>>>> ultimately, the reactor base directory should be the same as the
>>>>> multi-module project base directory but they are not. I would also
>>>>> argue that the reactor should always contain all the projects as if
>>>>> you started the build from the multi-module project but this is also
>>>>> not the case which I believe is highly confusing the users because
>>>>> they expect the in-situ build results to be used. At least from my
>>>>> un-scientific polling from a few hundred users.
>>>>> 
>>>>> But whether there is one project or many what we are trying to
>>>>> express here is the multi-module project base directory and I think
>>>>> we need a concept for this so this would be a good place to start.
>>>>> 
>>>>> How about multiModuleProjectBaseDirectory? Lengthly but I think it's
>>>>> clear. >
>>>>> On Feb 21, 2015, at 8:57 AM, Robert Scholte <[email protected]>
>>>>> wrote:
>>>>> 
>>>>>> Op Sat, 21 Feb 2015 14:12:22 +0100 schreef Igor Fedorenko
>>>>>> <[email protected]>:
>>>>>> 
>>>>>>> 
>>>>>>> On 2015-02-21 7:02, Robert Scholte wrote:
>>>>>>>> Hi Igor,
>>>>>>>> 
>>>>>>>> I agree that something like MNG-5767 can indeed help with the
>>>>>>>> experience.
>>>>>>>> 
>>>>>>>> Looking at the implementation I find the name projectBaseDirectory
>>>>>>>> confusing, I would have thought that this is a per project(module)
>>>>>>>> baseDirectory.
>>>>>>>> We already have things like project.basedir and project.executionRoot
>>>>>>>> Couldn't you (re)use the executionRoot, which seems to be exactly
>>>>>>>> what
>>>>>>>> you want.
>>>>>>>> I just think that projectBaseDirectory is too abstract, I'd prefer a
>>>>>>>> more concrete name.
>>>>>>>> 
>>>>>>> 
>>>>>>> MavenSession#executionRoot is normally set to user work directory. For
>>>>>>> example, consider typical multimodule project
>>>>>>> 
>>>>>>>   project          <= the new "basedir" I need to introduce
>>>>>>>   |- pom.xml
>>>>>>>   |- moduleA       <= executionRoot == user.home
>>>>>>>   |  \- pom.xml
>>>>>>>   \- moduleB
>>>>>>>      \- pom.xml
>>>>>>> 
>>>>>>> When the user executes the build from project/moduleA directory,
>>>>>>> session
>>>>>>> execution root will be set to project/moduleA directory. The new
>>>>>>> "basedir" I need to introduce must always point at the root of the
>>>>>>> project source tree, regardless where the build is started.
>>>>>> 
>>>>>> 
>>>>>> Are you sure this will work?
>>>>>> IIRC there's a difference between
>>>>>> project> mvn <phase> -pl :moduleA  (here's the executionRoot
>>>>>> project/ , right?)
>>>>>> and
>>>>>> project/moduleA> mvn <phase>
>>>>>> 
>>>>>> You should not assume that module-parent and children always point
>>>>>> to each other.
>>>>>> MNG-4324[1] is a feature request which is very related to your
>>>>>> issue: Find the real root. And is is tricky :)
>>>>>> Once MNG-4324 is fixed, your issue is a simple enhancement on it.
>>>>>> How about reactorBaseDirectory/reactorRootDirectory?
>>>>>> 
>>>>>> thanks,
>>>>>> Robert
>>>>>> 
>>>>>> [1] https://jira.codehaus.org/browse/MNG-4324
>>>>>> 
>>>>>>> 
>>>>>>> I can see how projectBaseDirectory name can be confusing, however, and
>>>>>>> happy to change the code if we find a better name. Does
>>>>>>> "sourceBaseDirectory" look better? Can you suggest a better name?
>>>>>>> 
>>>>>>>> How about using the script-name as basename for the config.
>>>>>>>> mvn.config (or mvn.opts) for mvn.sh/mvn.bat
>>>>>>>> mvndebug.config (or mvndebug.opts) for mvndebug.sh/mvndebug.bat
>>>>>>>> In the end you want override the "global" (i.e environment variable
>>>>>>>> based) properties and with project specific values *for these
>>>>>>>> scripts*,
>>>>>>>> right?
>>>>>>> 
>>>>>>> $MAVEN_OPTS is supposed to override values provided in
>>>>>>> .mvn/java.config
>>>>>>> file. Likewise, explicitly specified mvn command line parameters are
>>>>>>> supposed to override values specified in .mvn/maven.config file. The
>>>>>>> idea is to allow users override project-provided configuration at
>>>>>>> build
>>>>>>> time. I believe I tested this, but if you see implementation behaves
>>>>>>> differently, please show me how to reproduce and I'll fix it.
>>>>>>> 
>>>>>>> I do not believe configuration is specific to the script used to run
>>>>>>> maven. If project requires 1G of heap to build, this requirement is
>>>>>>> the
>>>>>>> same regardless if 'mvn' or 'mvnDebug' is used to start the build.
>>>>>>> 
>>>>>>> --
>>>>>>> Regards,
>>>>>>> Igor
>>>>>>> 
>>>>>>> 
>>>>>>>> thanks,
>>>>>>>> Robert
>>>>>>>> 
>>>>>>>> Op Fri, 20 Feb 2015 14:15:15 +0100 schreef <[email protected]>:
>>>>>>>> 
>>>>>>>>> Repository: maven
>>>>>>>>> Updated Branches:
>>>>>>>>>  refs/heads/master ee7dbab69 -> 8ed9a1caa
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> MNG-5767 .mvn/ for project specific jvm options and maven parameters
>>>>>>>>> 
>>>>>>>>> Signed-off-by: Igor Fedorenko <[email protected]>
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Project: http://git-wip-us.apache.org/repos/asf/maven/repo
>>>>>>>>> Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/8ed9a1ca
>>>>>>>>> Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/8ed9a1ca
>>>>>>>>> Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/8ed9a1ca
>>>>>>>>> 
>>>>>>>>> Branch: refs/heads/master
>>>>>>>>> Commit: 8ed9a1caa8890773b45c6c408a4e40acf4f4b0fd
>>>>>>>>> Parents: ee7dbab
>>>>>>>>> Author: Igor Fedorenko <[email protected]>
>>>>>>>>> Authored: Mon Jan 26 14:22:05 2015 -0500
>>>>>>>>> Committer: Igor Fedorenko <[email protected]>
>>>>>>>>> Committed: Fri Feb 20 08:14:08 2015 -0500
>>>>>>>>> 
>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>> 
>>>>>>>>> apache-maven/src/bin/mvn                        | 29 +++++++++-
>>>>>>>>> .../execution/DefaultMavenExecutionRequest.java | 14 +++++
>>>>>>>>> .../maven/execution/MavenExecutionRequest.java  |  9 +++
>>>>>>>>> .../java/org/apache/maven/cli/MavenCli.java     | 57
>>>>>>>>> ++++++++++++++++++-
>>>>>>>>> .../java/org/apache/maven/cli/MavenCliTest.java | 59
>>>>>>>>> ++++++++++++++++++++
>>>>>>>>> .../projects/config-illegal/.mvn/maven.config   |  1 +
>>>>>>>>> .../src/test/projects/config/.mvn/maven.config  |  2 +
>>>>>>>>> 7 files changed, 166 insertions(+), 5 deletions(-)
>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> http://git-wip-us.apache.org/repos/asf/maven/blob/8ed9a1ca/apache-maven/src/bin/mvn
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>> 
>>>>>>>>> diff --git a/apache-maven/src/bin/mvn b/apache-maven/src/bin/mvn
>>>>>>>>> index 1ed3024..26feda4 100755
>>>>>>>>> --- a/apache-maven/src/bin/mvn
>>>>>>>>> +++ b/apache-maven/src/bin/mvn
>>>>>>>>> @@ -189,14 +189,39 @@ if $cygwin; then
>>>>>>>>>     CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
>>>>>>>>> fi
>>>>>>>>> +# traverses directory structure from process work directory to
>>>>>>>>> filesystem root
>>>>>>>>> +# first directory with .mvn subdirectory is considered project base
>>>>>>>>> directory
>>>>>>>>> +find_maven_basedir() {
>>>>>>>>> +  local basedir=$(pwd)
>>>>>>>>> +  local wdir=$(pwd)
>>>>>>>>> +  while [ "$wdir" != '/' ] ; do
>>>>>>>>> +    wdir=$(cd $wdir/..; pwd)
>>>>>>>>> +    if [ -d "$wdir"/.mvn ] ; then
>>>>>>>>> +      basedir=$wdir
>>>>>>>>> +      break
>>>>>>>>> +    fi
>>>>>>>>> +  done
>>>>>>>>> +  echo "${basedir}"
>>>>>>>>> +}
>>>>>>>>> +
>>>>>>>>> +# concatenates all lines of a file
>>>>>>>>> +concat_lines() {
>>>>>>>>> +  if [ -f "$1" ]; then
>>>>>>>>> +    echo "$(tr -s '\n' ' ' < "$1")"
>>>>>>>>> +  fi
>>>>>>>>> +}
>>>>>>>>> +
>>>>>>>>> +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
>>>>>>>>> +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config")
>>>>>>>>> $MAVEN_OPTS"
>>>>>>>>> +
>>>>>>>>> # Provide a "standardized" way to retrieve the CLI args that will
>>>>>>>>> # work with both Windows and non-Windows executions.
>>>>>>>>> -MAVEN_CMD_LINE_ARGS="$@"
>>>>>>>>> +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
>>>>>>>>> export MAVEN_CMD_LINE_ARGS
>>>>>>>>> exec "$JAVACMD" \
>>>>>>>>>   $MAVEN_OPTS \
>>>>>>>>>   -classpath "${M2_HOME}"/boot/plexus-classworlds-*.jar \
>>>>>>>>>   "-Dclassworlds.conf=${M2_HOME}/bin/m2.conf" \
>>>>>>>>> -  "-Dmaven.home=${M2_HOME}"  \
>>>>>>>>> +  "-Dmaven.home=${M2_HOME}"
>>>>>>>>> "-Dmaven.projectBasedir=${MAVEN_PROJECTBASEDIR}" \
>>>>>>>>>   ${CLASSWORLDS_LAUNCHER} "$@"
>>>>>>>>> 
>>>>>>>>> http://git-wip-us.apache.org/repos/asf/maven/blob/8ed9a1ca/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>> 
>>>>>>>>> diff --git
>>>>>>>>> a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
>>>>>>>>> 
>>>>>>>>> b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> index d88024d..f4439b1 100644
>>>>>>>>> ---
>>>>>>>>> a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> +++
>>>>>>>>> b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> @@ -93,6 +93,8 @@ public class DefaultMavenExecutionRequest
>>>>>>>>>     // Request
>>>>>>>>>     //
>>>>>>>>> ----------------------------------------------------------------------------
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> +    private File projectBasedir;
>>>>>>>>> +
>>>>>>>>>     private File basedir;
>>>>>>>>>    private List<String> goals;
>>>>>>>>> @@ -1149,4 +1151,16 @@ public class DefaultMavenExecutionRequest
>>>>>>>>>         this.toolchains = toolchains;
>>>>>>>>>         return this;
>>>>>>>>>     }
>>>>>>>>> +
>>>>>>>>> +    @Override
>>>>>>>>> +    public void setProjectBaseDirectory( File directory )
>>>>>>>>> +    {
>>>>>>>>> +        this.projectBasedir = directory;
>>>>>>>>> +    }
>>>>>>>>> +
>>>>>>>>> +    @Override
>>>>>>>>> +    public File getProjectBaseDirectory()
>>>>>>>>> +    {
>>>>>>>>> +        return projectBasedir;
>>>>>>>>> +    }
>>>>>>>>> }
>>>>>>>>> 
>>>>>>>>> http://git-wip-us.apache.org/repos/asf/maven/blob/8ed9a1ca/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>> 
>>>>>>>>> diff --git
>>>>>>>>> a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
>>>>>>>>> 
>>>>>>>>> b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> index 2b2a1d8..55d7ff2 100644
>>>>>>>>> ---
>>>>>>>>> a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> +++
>>>>>>>>> b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> @@ -415,4 +415,13 @@ public interface MavenExecutionRequest
>>>>>>>>>      */
>>>>>>>>>     Map<String, List<ToolchainModel>> getToolchains();
>>>>>>>>> +    /**
>>>>>>>>> +     * @since 3.2.6
>>>>>>>>> +     */
>>>>>>>>> +    void setProjectBaseDirectory( File file );
>>>>>>>>> +
>>>>>>>>> +    /**
>>>>>>>>> +     * @since 3.2.6
>>>>>>>>> +     */
>>>>>>>>> +    File getProjectBaseDirectory();
>>>>>>>>> }
>>>>>>>>> 
>>>>>>>>> http://git-wip-us.apache.org/repos/asf/maven/blob/8ed9a1ca/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>> 
>>>>>>>>> diff --git
>>>>>>>>> a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
>>>>>>>>> b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
>>>>>>>>> index 35ccbd2..238be22 100644
>>>>>>>>> ---
>>>>>>>>> a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
>>>>>>>>> +++
>>>>>>>>> b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
>>>>>>>>> @@ -23,8 +23,10 @@ import java.io.Console;
>>>>>>>>> import java.io.File;
>>>>>>>>> import java.io.FileNotFoundException;
>>>>>>>>> import java.io.FileOutputStream;
>>>>>>>>> +import java.io.IOException;
>>>>>>>>> import java.io.PrintStream;
>>>>>>>>> import java.util.ArrayList;
>>>>>>>>> +import java.util.Arrays;
>>>>>>>>> import java.util.LinkedHashMap;
>>>>>>>>> import java.util.List;
>>>>>>>>> import java.util.Map;
>>>>>>>>> @@ -92,6 +94,8 @@ import
>>>>>>>>> org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
>>>>>>>>> import org.sonatype.plexus.components.sec.dispatcher.SecUtil;
>>>>>>>>> import
>>>>>>>>> org.sonatype.plexus.components.sec.dispatcher.model.SettingsSecurity;
>>>>>>>>> 
>>>>>>>>> +import com.google.common.base.Charsets;
>>>>>>>>> +import com.google.common.io.Files;
>>>>>>>>> import com.google.inject.AbstractModule;
>>>>>>>>> // TODO: push all common bits back to plexus cli and prepare for
>>>>>>>>> transition to Guice. We don't need 50 ways to make CLIs
>>>>>>>>> @@ -106,6 +110,8 @@ public class MavenCli
>>>>>>>>>    public static final String THREADS_DEPRECATED =
>>>>>>>>> "maven.threads.experimental";
>>>>>>>>> +    public static final String PROJECT_BASEDIR =
>>>>>>>>> "maven.projectBasedir";
>>>>>>>>> +
>>>>>>>>>     @SuppressWarnings( "checkstyle:constantname" )
>>>>>>>>>     public static final String userHome = System.getProperty(
>>>>>>>>> "user.home" );
>>>>>>>>> @@ -257,13 +263,27 @@ public class MavenCli
>>>>>>>>>         }
>>>>>>>>>     }
>>>>>>>>> -    private void initialize( CliRequest cliRequest )
>>>>>>>>> +    void initialize( CliRequest cliRequest )
>>>>>>>>>     {
>>>>>>>>>         if ( cliRequest.workingDirectory == null )
>>>>>>>>>         {
>>>>>>>>>             cliRequest.workingDirectory = System.getProperty(
>>>>>>>>> "user.dir" );
>>>>>>>>>         }
>>>>>>>>> +        if ( cliRequest.projectBaseDirectory == null )
>>>>>>>>> +        {
>>>>>>>>> +            String basedirProperty = System.getProperty(
>>>>>>>>> PROJECT_BASEDIR );
>>>>>>>>> +            File basedir = basedirProperty != null ? new File(
>>>>>>>>> basedirProperty ) : new File( "" );
>>>>>>>>> +            try
>>>>>>>>> +            {
>>>>>>>>> +                cliRequest.projectBaseDirectory =
>>>>>>>>> basedir.getCanonicalFile();
>>>>>>>>> +            }
>>>>>>>>> +            catch ( IOException e )
>>>>>>>>> +            {
>>>>>>>>> +                cliRequest.projectBaseDirectory =
>>>>>>>>> basedir.getAbsoluteFile();
>>>>>>>>> +            }
>>>>>>>>> +        }
>>>>>>>>> +
>>>>>>>>>         //
>>>>>>>>>         // Make sure the Maven home directory is an absolute
>>>>>>>>> path to
>>>>>>>>> save us from confusion with say drive-relative
>>>>>>>>>         // Windows paths.
>>>>>>>>> @@ -276,7 +296,7 @@ public class MavenCli
>>>>>>>>>         }
>>>>>>>>>     }
>>>>>>>>> -    private void cli( CliRequest cliRequest )
>>>>>>>>> +    void cli( CliRequest cliRequest )
>>>>>>>>>         throws Exception
>>>>>>>>>     {
>>>>>>>>>         //
>>>>>>>>> @@ -287,9 +307,38 @@ public class MavenCli
>>>>>>>>>        CLIManager cliManager = new CLIManager();
>>>>>>>>> +        List<String> args = new ArrayList<String>();
>>>>>>>>> +
>>>>>>>>> +        try
>>>>>>>>> +        {
>>>>>>>>> +            File configFile = new File(
>>>>>>>>> cliRequest.projectBaseDirectory, ".mvn/maven.config" );
>>>>>>>>> +
>>>>>>>>> +            if ( configFile.isFile() )
>>>>>>>>> +            {
>>>>>>>>> +                for ( String arg : Files.toString( configFile,
>>>>>>>>> Charsets.UTF_8 ).split( "\\s+" ) )
>>>>>>>>> +                {
>>>>>>>>> +                    args.add( arg );
>>>>>>>>> +                }
>>>>>>>>> +
>>>>>>>>> +                CommandLine config = cliManager.parse(
>>>>>>>>> args.toArray(
>>>>>>>>> new String[args.size()] ) );
>>>>>>>>> +                List<?> unrecongized = config.getArgList();
>>>>>>>>> +                if ( !unrecongized.isEmpty() )
>>>>>>>>> +                {
>>>>>>>>> +                    throw new ParseException( "Unrecognized
>>>>>>>>> maven.config entries: " + unrecongized );
>>>>>>>>> +                }
>>>>>>>>> +            }
>>>>>>>>> +        }
>>>>>>>>> +        catch ( ParseException e )
>>>>>>>>> +        {
>>>>>>>>> +            System.err.println( "Unable to parse maven.config: " +
>>>>>>>>> e.getMessage() );
>>>>>>>>> +            cliManager.displayHelp( System.out );
>>>>>>>>> +            throw e;
>>>>>>>>> +        }
>>>>>>>>> +
>>>>>>>>>         try
>>>>>>>>>         {
>>>>>>>>> -            cliRequest.commandLine = cliManager.parse(
>>>>>>>>> cliRequest.args );
>>>>>>>>> +            args.addAll( 0, Arrays.asList( cliRequest.args ) );
>>>>>>>>> +            cliRequest.commandLine = cliManager.parse(
>>>>>>>>> args.toArray(
>>>>>>>>> new String[args.size()] ) );
>>>>>>>>>         }
>>>>>>>>>         catch ( ParseException e )
>>>>>>>>>         {
>>>>>>>>> @@ -1074,6 +1123,7 @@ public class MavenCli
>>>>>>>>>             .setUpdateSnapshots( updateSnapshots ) // default:
>>>>>>>>> false
>>>>>>>>>             .setNoSnapshotUpdates( noSnapshotUpdates ) //
>>>>>>>>> default: false
>>>>>>>>>             .setGlobalChecksumPolicy( globalChecksumPolicy ) //
>>>>>>>>> default: warn
>>>>>>>>> +            .setProjectBaseDirectory(
>>>>>>>>> cliRequest.projectBaseDirectory )
>>>>>>>>>             ;
>>>>>>>>>        if ( alternatePomFile != null )
>>>>>>>>> @@ -1322,6 +1372,7 @@ public class MavenCli
>>>>>>>>>         CommandLine commandLine;
>>>>>>>>>         ClassWorld classWorld;
>>>>>>>>>         String workingDirectory;
>>>>>>>>> +        File projectBaseDirectory;
>>>>>>>>>         boolean debug;
>>>>>>>>>         boolean quiet;
>>>>>>>>>         boolean showErrors = true;
>>>>>>>>> 
>>>>>>>>> http://git-wip-us.apache.org/repos/asf/maven/blob/8ed9a1ca/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>> 
>>>>>>>>> diff --git
>>>>>>>>> a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
>>>>>>>>> 
>>>>>>>>> b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
>>>>>>>>> 
>>>>>>>>> index 6e06cc5..628ef20 100644
>>>>>>>>> ---
>>>>>>>>> a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
>>>>>>>>> 
>>>>>>>>> +++
>>>>>>>>> b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
>>>>>>>>> 
>>>>>>>>> @@ -19,16 +19,39 @@ package org.apache.maven.cli;
>>>>>>>>>  * under the License.
>>>>>>>>>  */
>>>>>>>>> +import java.io.File;
>>>>>>>>> +
>>>>>>>>> import junit.framework.TestCase;
>>>>>>>>> +import org.apache.commons.cli.ParseException;
>>>>>>>>> +import org.apache.maven.cli.MavenCli.CliRequest;
>>>>>>>>> +
>>>>>>>>> public class MavenCliTest
>>>>>>>>>     extends TestCase
>>>>>>>>> {
>>>>>>>>>     private MavenCli cli;
>>>>>>>>> +    private String origBasedir;
>>>>>>>>> +
>>>>>>>>>     protected void setUp()
>>>>>>>>>     {
>>>>>>>>>         cli = new MavenCli();
>>>>>>>>> +        origBasedir = System.getProperty(
>>>>>>>>> MavenCli.PROJECT_BASEDIR );
>>>>>>>>> +    }
>>>>>>>>> +
>>>>>>>>> +    @Override
>>>>>>>>> +    protected void tearDown()
>>>>>>>>> +        throws Exception
>>>>>>>>> +    {
>>>>>>>>> +        if ( origBasedir != null )
>>>>>>>>> +        {
>>>>>>>>> +            System.setProperty( MavenCli.PROJECT_BASEDIR,
>>>>>>>>> origBasedir );
>>>>>>>>> +        }
>>>>>>>>> +        else
>>>>>>>>> +        {
>>>>>>>>> +            System.getProperties().remove(
>>>>>>>>> MavenCli.PROJECT_BASEDIR );
>>>>>>>>> +        }
>>>>>>>>> +        super.tearDown();
>>>>>>>>>     }
>>>>>>>>>    public void testCalculateDegreeOfConcurrencyWithCoreMultiplier()
>>>>>>>>> @@ -49,4 +72,40 @@ public class MavenCliTest
>>>>>>>>>             // carry on
>>>>>>>>>         }
>>>>>>>>>     }
>>>>>>>>> +
>>>>>>>>> +    public void testMavenConfig()
>>>>>>>>> +        throws Exception
>>>>>>>>> +    {
>>>>>>>>> +        System.setProperty( MavenCli.PROJECT_BASEDIR, new File(
>>>>>>>>> "src/test/projects/config" ).getCanonicalPath() );
>>>>>>>>> +        CliRequest request = new CliRequest( new String[0], null );
>>>>>>>>> +
>>>>>>>>> +        // read .mvn/maven.config
>>>>>>>>> +        cli.initialize( request );
>>>>>>>>> +        cli.cli( request );
>>>>>>>>> +        assertEquals( "multithreaded",
>>>>>>>>> request.commandLine.getOptionValue( "builder" ) );
>>>>>>>>> +        assertEquals( "8", request.commandLine.getOptionValue(
>>>>>>>>> "threads" ) );
>>>>>>>>> +
>>>>>>>>> +        // override from command line
>>>>>>>>> +        request = new CliRequest( new String[] { "--builder",
>>>>>>>>> "foobar" }, null );
>>>>>>>>> +        cli.cli( request );
>>>>>>>>> +        assertEquals( "foobar", request.commandLine.getOptionValue(
>>>>>>>>> "builder" ) );
>>>>>>>>> +    }
>>>>>>>>> +
>>>>>>>>> +    public void testMavenConfigInvalid()
>>>>>>>>> +        throws Exception
>>>>>>>>> +    {
>>>>>>>>> +        System.setProperty( MavenCli.PROJECT_BASEDIR, new File(
>>>>>>>>> "src/test/projects/config-illegal" ).getCanonicalPath() );
>>>>>>>>> +        CliRequest request = new CliRequest( new String[0], null );
>>>>>>>>> +
>>>>>>>>> +        cli.initialize( request );
>>>>>>>>> +        try
>>>>>>>>> +        {
>>>>>>>>> +            cli.cli( request );
>>>>>>>>> +            fail();
>>>>>>>>> +        }
>>>>>>>>> +        catch ( ParseException expected )
>>>>>>>>> +        {
>>>>>>>>> +
>>>>>>>>> +        }
>>>>>>>>> +    }
>>>>>>>>> }
>>>>>>>>> 
>>>>>>>>> http://git-wip-us.apache.org/repos/asf/maven/blob/8ed9a1ca/maven-embedder/src/test/projects/config-illegal/.mvn/maven.config
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>> 
>>>>>>>>> diff --git
>>>>>>>>> a/maven-embedder/src/test/projects/config-illegal/.mvn/maven.config
>>>>>>>>> b/maven-embedder/src/test/projects/config-illegal/.mvn/maven.config
>>>>>>>>> new file mode 100644
>>>>>>>>> index 0000000..8541464
>>>>>>>>> --- /dev/null
>>>>>>>>> +++
>>>>>>>>> b/maven-embedder/src/test/projects/config-illegal/.mvn/maven.config
>>>>>>>>> @@ -0,0 +1 @@
>>>>>>>>> +deploy
>>>>>>>>> 
>>>>>>>>> http://git-wip-us.apache.org/repos/asf/maven/blob/8ed9a1ca/maven-embedder/src/test/projects/config/.mvn/maven.config
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>> 
>>>>>>>>> diff --git
>>>>>>>>> a/maven-embedder/src/test/projects/config/.mvn/maven.config
>>>>>>>>> b/maven-embedder/src/test/projects/config/.mvn/maven.config
>>>>>>>>> new file mode 100644
>>>>>>>>> index 0000000..3d0f13b
>>>>>>>>> --- /dev/null
>>>>>>>>> +++ b/maven-embedder/src/test/projects/config/.mvn/maven.config
>>>>>>>>> @@ -0,0 +1,2 @@
>>>>>>>>> +-T8 --builder
>>>>>>>>> +  multithreaded
>>>>>>>> 
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe, e-mail: [email protected]
>>>>>>>> For additional commands, e-mail: [email protected]
>>>>>>>> 
>>>>>>> 
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: [email protected]
>>>>>>> For additional commands, e-mail: [email protected]
>>>>>> 
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: [email protected]
>>>>>> For additional commands, e-mail: [email protected]
>>>>>> 
>>>>> 
>>>>> Thanks,
>>>>> 
>>>>> Jason
>>>>> 
>>>>> ----------------------------------------------------------
>>>>> Jason van Zyl
>>>>> Founder, Takari and Apache Maven
>>>>> http://twitter.com/jvanzyl
>>>>> http://twitter.com/takari_io
>>>>> ---------------------------------------------------------
>>>>> 
>>>>> To think is easy. To act is hard. But the hardest thing in the world
>>>>> is to act in accordance with your thinking.
>>>>> 
>>>>>  -- Johann von Goethe
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: [email protected]
>>>>> For additional commands, e-mail: [email protected]
>>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 

Thanks,

Jason

----------------------------------------------------------
Jason van Zyl
Founder, Takari and Apache Maven
http://twitter.com/jvanzyl
http://twitter.com/takari_io
---------------------------------------------------------

What matters is not ideas, but the people who have them. Good people can fix 
bad ideas, but good ideas can't save bad people. 

 -- Paul Graham













---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to