+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]
