maven-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Igor Fedorenko <i...@ifedorenko.com>
Subject Re: maven git commit: .mvn/ for project specific jvm options and maven parameters
Date Sun, 08 Feb 2015 18:29:42 GMT
Yes, I agree not supporting this feature on windows is not desirable,
but I don't know enough about windows scripting to implement this myself
and until somebody helps with the implementation we won't support this
feature on windows.

--
Regards,
Igor

On 2015-02-08 9:44, Arnaud Héritier wrote:
> And what about our dear windows users ?
> Don't forget that they are very numerous.
> Sadly Linux shell is many many far more powerful than windows .bat files
> and often we have to reduce features to keep the compatibility with windows.
> I wouldn't like to have different features for linux and for windows ...
>
>
> On Sun, Feb 8, 2015 at 3:04 PM, Jason van Zyl <jason@takari.io> wrote:
>
>> I think that also works. But I think the script not being executable it
>> makes it clear it's not a script. Whatever we decide I'm again filtering
>> it, just makes debugging painful.
>>
>> On Feb 8, 2015, at 7:57 AM, Igor Fedorenko <igor@ifedorenko.com> wrote:
>>
>>> I think maintenance overhead and code duplication concerns outweigh
>>> possible confusion an extra file might cause, but I think I have a
>>> better solution.
>>>
>>> What if there was single "real" mvn script and mvnDebug/mvnyjp were just
>>> symlinks pointing back to it? The script will behave differently based
>>> on the script name. Any objections to this plan?
>>>
>>> --
>>> Regards,
>>> Igor
>>>
>>> On 2015-02-08 6:23, Robert Scholte wrote:
>>>> Igor, Jason,
>>>>
>>>> my concern is not about having shared scripting. If that works, that'll
>>>> be great.
>>>> But from a user perspective I'd like to have a clean bin-folder. Only
>>>> have useful scripts here.
>>>> So my idea would be: when generating the distribution, just merge these
>>>> files to the ones we now have.
>>>> I understand Jasons concern regarding it a bit being less obvious when
>>>> patching, but that assumes there's still some patching to do every now
>>>> and then.
>>>> It shouldn't be too hard to do some filtering and only have useful
>>>> scripts (and disable it if you want to patch/test)
>>>>
>>>> thanks,
>>>> Robert
>>>>
>>>> Op Sat, 07 Feb 2015 15:12:17 +0100 schreef Igor Fedorenko
>>>> <igor@ifedorenko.com>:
>>>>
>>>>> Robert,
>>>>>
>>>>> Can you explain your concerns? I believe it is a common practice to use
>>>>> separate "include" file to keep logic shared by multiple scripts, why
>> do
>>>>> you think we need do it differently?
>>>>>
>>>>> --
>>>>> Regards,
>>>>> Igor
>>>>>
>>>>> On 2015-02-07 4:24, Robert Scholte wrote:
>>>>>> Igor,
>>>>>>
>>>>>> how about generating these scripts?
>>>>>> I'd prefer to have only useful scripts for the users in the bin
>>>>>> directory.
>>>>>> IIUC the mvn-common.sh is just used by all other scripts and shouldn't
>>>>>> be called by users.
>>>>>> So instead I'd like to see the other scripts being generated, all
>>>>>> including this common script.
>>>>>>
>>>>>> thanks,
>>>>>> Robert
>>>>>>
>>>>>> Op Fri, 06 Feb 2015 22:31:47 +0100 schreef <ifedorenko@apache.org>:
>>>>>>
>>>>>>> Repository: maven
>>>>>>> Updated Branches:
>>>>>>>   refs/heads/project-basedir 888109c68 -> e91144fbe (forced
update)
>>>>>>>
>>>>>>>
>>>>>>> .mvn/ for project specific jvm options and maven parameters
>>>>>>>
>>>>>>> Signed-off-by: Igor Fedorenko <ifedorenko@apache.org>
>>>>>>>
>>>>>>>
>>>>>>> Project: http://git-wip-us.apache.org/repos/asf/maven/repo
>>>>>>> Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/e91144fb
>>>>>>> Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/e91144fb
>>>>>>> Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/e91144fb
>>>>>>>
>>>>>>> Branch: refs/heads/project-basedir
>>>>>>> Commit: e91144fbed65c797abb615f1cbcc838271ff36f4
>>>>>>> Parents: d745f8c
>>>>>>> Author: Igor Fedorenko <ifedorenko@apache.org>
>>>>>>> Authored: Mon Jan 26 14:22:05 2015 -0500
>>>>>>> Committer: Igor Fedorenko <ifedorenko@apache.org>
>>>>>>> Committed: Fri Feb 6 15:43:40 2015 -0500
>>>>>>>
>>>>>>>
>> ----------------------------------------------------------------------
>>>>>>> apache-maven/src/bin/.gitattributes             |  1 +
>>>>>>> apache-maven/src/bin/mvn                        |  8 ++-
>>>>>>> apache-maven/src/bin/mvn-common.sh              | 43 ++++++++++++++
>>>>>>> apache-maven/src/bin/mvnDebug                   |  8 ++-
>>>>>>> apache-maven/src/bin/mvnyjp                     | 23 ++++----
>>>>>>> apache-maven/src/main/assembly/bin.xml          |  1 +
>>>>>>> .../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 +
>>>>>>> 12 files changed, 207 insertions(+), 19 deletions(-)
>>>>>>>
>> ----------------------------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>> http://git-wip-us.apache.org/repos/asf/maven/blob/e91144fb/apache-maven/src/bin/.gitattributes
>>>>>>>
>>>>>>>
>>>>>>>
>> ----------------------------------------------------------------------
>>>>>>> diff --git a/apache-maven/src/bin/.gitattributes
>>>>>>> b/apache-maven/src/bin/.gitattributes
>>>>>>> index cc7533f..90eeece 100644
>>>>>>> --- a/apache-maven/src/bin/.gitattributes
>>>>>>> +++ b/apache-maven/src/bin/.gitattributes
>>>>>>> @@ -1,3 +1,4 @@
>>>>>>> mvn                eol=lf crlf=input
>>>>>>> mvnDebug           eol=lf crlf=input
>>>>>>> mvnyjp             eol=lf crlf=input
>>>>>>> +mvn-common.sh      eol=lf crlf=input
>>>>>>>
>>>>>>>
>> http://git-wip-us.apache.org/repos/asf/maven/blob/e91144fb/apache-maven/src/bin/mvn
>>>>>>>
>>>>>>>
>>>>>>>
>> ----------------------------------------------------------------------
>>>>>>> diff --git a/apache-maven/src/bin/mvn b/apache-maven/src/bin/mvn
>>>>>>> index 1ed3024..f745f4e 100755
>>>>>>> --- a/apache-maven/src/bin/mvn
>>>>>>> +++ b/apache-maven/src/bin/mvn
>>>>>>> @@ -189,14 +189,18 @@ if $cygwin; then
>>>>>>>      CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
>>>>>>> fi
>>>>>>> +. "$M2_HOME/bin/mvn-common.sh"
>>>>>>> +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/e91144fb/apache-maven/src/bin/mvn-common.sh
>>>>>>>
>>>>>>>
>>>>>>>
>> ----------------------------------------------------------------------
>>>>>>> diff --git a/apache-maven/src/bin/mvn-common.sh
>>>>>>> b/apache-maven/src/bin/mvn-common.sh
>>>>>>> new file mode 100755
>>>>>>> index 0000000..b39741b
>>>>>>> --- /dev/null
>>>>>>> +++ b/apache-maven/src/bin/mvn-common.sh
>>>>>>> @@ -0,0 +1,43 @@
>>>>>>> +#!/bin/sh
>>>>>>> +#
>>>>>>>
>> ----------------------------------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>> +# Licensed to the Apache Software Foundation (ASF) under one
>>>>>>> +# or more contributor license agreements.  See the NOTICE file
>>>>>>> +# distributed with this work for additional information
>>>>>>> +# regarding copyright ownership.  The ASF licenses this file
>>>>>>> +# to you under the Apache License, Version 2.0 (the
>>>>>>> +# "License"); you may not use this file except in compliance
>>>>>>> +# with the License.  You may obtain a copy of the License at
>>>>>>> +#
>>>>>>> +#    http://www.apache.org/licenses/LICENSE-2.0
>>>>>>> +#
>>>>>>> +# Unless required by applicable law or agreed to in writing,
>>>>>>> +# software distributed under the License is distributed on an
>>>>>>> +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>>>>> +# KIND, either express or implied.  See the License for the
>>>>>>> +# specific language governing permissions and limitations
>>>>>>> +# under the License.
>>>>>>> +#
>>>>>>>
>> ----------------------------------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>> +
>>>>>>> +# TODO ideally, this should contain all logic common to mvn*
shell
>>>>>>> scripts
>>>>>>> +
>>>>>>> +# 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
>>>>>>> +}
>>>>>>>
>>>>>>>
>> http://git-wip-us.apache.org/repos/asf/maven/blob/e91144fb/apache-maven/src/bin/mvnDebug
>>>>>>>
>>>>>>>
>>>>>>>
>> ----------------------------------------------------------------------
>>>>>>> diff --git a/apache-maven/src/bin/mvnDebug
>>>>>>> b/apache-maven/src/bin/mvnDebug
>>>>>>> index 291f81f..287d20b 100755
>>>>>>> --- a/apache-maven/src/bin/mvnDebug
>>>>>>> +++ b/apache-maven/src/bin/mvnDebug
>>>>>>> @@ -193,9 +193,13 @@ if $cygwin; then
>>>>>>>      CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
>>>>>>> fi
>>>>>>> +. "$M2_HOME/bin/mvn-common.sh"
>>>>>>> +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" \
>>>>>>> @@ -203,5 +207,5 @@ exec "$JAVACMD" \
>>>>>>>    $MAVEN_DEBUG_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/e91144fb/apache-maven/src/bin/mvnyjp
>>>>>>>
>>>>>>>
>>>>>>>
>> ----------------------------------------------------------------------
>>>>>>> diff --git a/apache-maven/src/bin/mvnyjp
>> b/apache-maven/src/bin/mvnyjp
>>>>>>> index faf3412..6d5f555 100755
>>>>>>> --- a/apache-maven/src/bin/mvnyjp
>>>>>>> +++ b/apache-maven/src/bin/mvnyjp
>>>>>>> @@ -34,14 +34,6 @@
>>>>>>> #   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
>>>>>>> #
>>>>>>>
>> ----------------------------------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>> -QUOTED_ARGS=""
>>>>>>> -while [ "$1" != "" ] ; do
>>>>>>> -
>>>>>>> -  QUOTED_ARGS="$QUOTED_ARGS \"$1\""
>>>>>>> -  shift
>>>>>>> -
>>>>>>> -done
>>>>>>> -
>>>>>>> if [ -z "$MAVEN_SKIP_RC" ] ; then
>>>>>>>   if [ -f /etc/mavenrc ] ; then
>>>>>>> @@ -204,11 +196,18 @@ fi
>>>>>>>
>> MAVEN_OPTS="-agentpath:$YJPLIB=onexit=snapshot,onexit=memory,tracing,onlylocal
>>>>>>>
>>>>>>> $MAVEN_OPTS"
>>>>>>> +. "$M2_HOME/bin/mvn-common.sh"
>>>>>>> +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_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}"  \
>>>>>>> -  ${CLASSWORLDS_LAUNCHER} $QUOTED_ARGS
>>>>>>> -
>>>>>>> -
>>>>>>> +  "-Dmaven.home=${M2_HOME}"
>>>>>>> "-Dmaven.projectBasedir=${MAVEN_PROJECTBASEDIR}" \
>>>>>>> +  ${CLASSWORLDS_LAUNCHER} "$@"
>>>>>>>
>>>>>>>
>> http://git-wip-us.apache.org/repos/asf/maven/blob/e91144fb/apache-maven/src/main/assembly/bin.xml
>>>>>>>
>>>>>>>
>>>>>>>
>> ----------------------------------------------------------------------
>>>>>>> diff --git a/apache-maven/src/main/assembly/bin.xml
>>>>>>> b/apache-maven/src/main/assembly/bin.xml
>>>>>>> index b2aa900..6b862f8 100644
>>>>>>> --- a/apache-maven/src/main/assembly/bin.xml
>>>>>>> +++ b/apache-maven/src/main/assembly/bin.xml
>>>>>>> @@ -74,6 +74,7 @@ under the License.
>>>>>>>        <outputDirectory>bin</outputDirectory>
>>>>>>>        <includes>
>>>>>>>          <include>m2</include>
>>>>>>> +        <include>mvn-common.sh</include>
>>>>>>>          <include>mvn</include>
>>>>>>>          <include>mvnDebug</include>
>>>>>>>          <!-- This is so that CI systems can periodically
run the
>>>>>>> profiler -->
>>>>>>>
>>>>>>>
>> http://git-wip-us.apache.org/repos/asf/maven/blob/e91144fb/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/e91144fb/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 15e2082..0591440 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
>>>>>>>
>>>>>>>
>>>>>>> @@ -411,4 +411,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/e91144fb/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 5b7bd7f..d04cbe0 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;
>>>>>>> @@ -91,6 +93,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
>>>>>>> @@ -105,6 +109,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" );
>>>>>>> @@ -256,13 +262,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.
>>>>>>> @@ -275,7 +295,7 @@ public class MavenCli
>>>>>>>          }
>>>>>>>      }
>>>>>>> -    private void cli( CliRequest cliRequest )
>>>>>>> +    void cli( CliRequest cliRequest )
>>>>>>>          throws Exception
>>>>>>>      {
>>>>>>>          //
>>>>>>> @@ -286,9 +306,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 )
>>>>>>>          {
>>>>>>> @@ -1070,6 +1119,7 @@ public class MavenCli
>>>>>>>              .setUpdateSnapshots( updateSnapshots ) // default:
false
>>>>>>>              .setNoSnapshotUpdates( noSnapshotUpdates ) // default:
>>>>>>> false
>>>>>>>              .setGlobalChecksumPolicy( globalChecksumPolicy )
//
>>>>>>> default: warn
>>>>>>> +            .setProjectBaseDirectory(
>>>>>>> cliRequest.projectBaseDirectory )
>>>>>>>              ;
>>>>>>>         if ( alternatePomFile != null )
>>>>>>> @@ -1319,6 +1369,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/e91144fb/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/e91144fb/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/e91144fb/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: dev-unsubscribe@maven.apache.org
>>>>>> For additional commands, e-mail: dev-help@maven.apache.org
>>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>>>>> For additional commands, e-mail: dev-help@maven.apache.org
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>>>> For additional commands, e-mail: dev-help@maven.apache.org
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>>> For additional commands, e-mail: dev-help@maven.apache.org
>>>
>>
>> Thanks,
>>
>> Jason
>>
>> ----------------------------------------------------------
>> Jason van Zyl
>> Founder, Takari and Apache Maven
>> http://twitter.com/jvanzyl
>> http://twitter.com/takari_io
>> ---------------------------------------------------------
>>
>> A language that doesn’t affect the way you think about programming is not
>> worth knowing.
>>
>>   -- Alan Perlis
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>> For additional commands, e-mail: dev-help@maven.apache.org
>>
>>
>
>

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


Mime
View raw message