Very excited to see how I can use this property.  Good stuff

Thanks

-Dan

On Wed, Aug 26, 2015 at 1:50 PM, Hervé BOUTEMY <[email protected]>
wrote:

> I think I have found a way to support module directory in SCM & site that
> is
> not artifactId
> AFAIK, it's a long awaited feature that was until now feared to wreck
> havock
>
> please review and tell what you think about it
>
> Regards,
>
> Hervé
>
> Le mercredi 26 août 2015 20:26:37 [email protected] a écrit :
> > Repository: maven
> > Updated Branches:
> >   refs/heads/MNG-5878 [created] 812e1e9d5
> >
> >
> > MNG-5878 added project.directory property to configure module directory
> > when not equals to artifactId
> >
> > Project: http://git-wip-us.apache.org/repos/asf/maven/repo
> > Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/812e1e9d
> > Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/812e1e9d
> > Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/812e1e9d
> >
> > Branch: refs/heads/MNG-5878
> > Commit: 812e1e9d5b7d15a3b206371fc18110193f83cc1f
> > Parents: 6b6e9bf
> > Author: Hervé Boutemy <[email protected]>
> > Authored: Wed Aug 26 22:26:17 2015 +0200
> > Committer: Hervé Boutemy <[email protected]>
> > Committed: Wed Aug 26 22:26:17 2015 +0200
> >
> > ----------------------------------------------------------------------
> >  .../DefaultInheritanceAssembler.java            | 60
> ++++++++++++++++----
> >  maven-model-builder/src/site/apt/index.apt      |  2 +-
> >  .../DefaultInheritanceAssemblerTest.java        | 27 ++++++++-
> >  .../module-path-not-artifactId-child.xml        | 43 ++++++++++++++
> >  .../module-path-not-artifactId-expected.xml     | 44 ++++++++++++++
> >  .../module-path-not-artifactId-parent.xml       | 37 ++++++++++++
> >  6 files changed, 199 insertions(+), 14 deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/maven/blob/812e1e9d/maven-model-build
> >
> er/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemb
> > ler.java
> > ----------------------------------------------------------------------
> diff
> > --git
> >
> a/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/Defa
> > ultInheritanceAssembler.java
> >
> b/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/Defa
> > ultInheritanceAssembler.java index 48fdad5..7c2a3b4 100644
> > ---
> >
> a/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/Defa
> > ultInheritanceAssembler.java +++
> >
> b/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/Defa
> > ultInheritanceAssembler.java @@ -19,14 +19,16 @@ package
> > org.apache.maven.model.inheritance;
> >   * under the License.
> >   */
> >
> > -import java.io.File;
> >  import java.util.ArrayList;
> >  import java.util.HashMap;
> >  import java.util.LinkedHashMap;
> >  import java.util.List;
> >  import java.util.Map;
> > +import java.util.Properties;
> >
> > +import org.apache.maven.model.InputLocation;
> >  import org.apache.maven.model.Model;
> > +import org.apache.maven.model.ModelBase;
> >  import org.apache.maven.model.Plugin;
> >  import org.apache.maven.model.PluginContainer;
> >  import org.apache.maven.model.ReportPlugin;
> > @@ -48,12 +50,18 @@ public class DefaultInheritanceAssembler
> >
> >      private InheritanceModelMerger merger = new
> InheritanceModelMerger();
> >
> > +    private final static String CHILD_DIRECTORY = "child-directory";
> > +
> > +    private final static String CHILD_DIRECTORY_PROPERTY =
> > "project.directory"; +
> >      @Override
> >      public void assembleModelInheritance( Model child, Model parent,
> > ModelBuildingRequest request, ModelProblemCollector problems ) {
> >          Map<Object, Object> hints = new HashMap<>();
> > -        hints.put( MavenModelMerger.CHILD_PATH_ADJUSTMENT,
> > getChildPathAdjustment( child, parent ) ); +        String childPath =
> > child.getProperties().getProperty( CHILD_DIRECTORY_PROPERTY,
> > child.getArtifactId() ); +        hints.put( CHILD_DIRECTORY, childPath
> );
> > +        hints.put( MavenModelMerger.CHILD_PATH_ADJUSTMENT,
> > getChildPathAdjustment( child, parent, childPath ) ); merger.merge(
> child,
> > parent, false, hints );
> >      }
> >
> > @@ -75,7 +83,7 @@ public class DefaultInheritanceAssembler
> >       * @param parent The parent model, may be <code>null</code>.
> >       * @return The path adjustment, can be empty but never
> > <code>null</code>. */
> > -    private String getChildPathAdjustment( Model child, Model parent )
> > +    private String getChildPathAdjustment( Model child, Model parent,
> > String childDirectory ) {
> >          String adjustment = "";
> >
> > @@ -90,10 +98,9 @@ public class DefaultInheritanceAssembler
> >               * repository. In other words, modules where artifactId !=
> > moduleDirName will see different effective URLs * depending on how the
> > model was constructed (from filesystem or from repository). */
> > -            File childDirectory = child.getProjectDirectory();
> > -            if ( childDirectory != null )
> > +            if ( child.getProjectDirectory() != null )
> >              {
> > -                childName = childDirectory.getName();
> > +                childName = child.getProjectDirectory().getName();
> >              }
> >
> >              for ( String module : parent.getModules() )
> > @@ -115,7 +122,7 @@ public class DefaultInheritanceAssembler
> >
> >                  moduleName = moduleName.substring( lastSlash + 1 );
> >
> > -                if ( moduleName.equals( childName ) && lastSlash >= 0 )
> > +                if ( ( moduleName.equals( childName ) || (
> > moduleName.equals( childDirectory ) ) ) && lastSlash >= 0 ) {
> >                      adjustment = module.substring( 0, lastSlash );
> >                      break;
> > @@ -133,13 +140,13 @@ public class DefaultInheritanceAssembler
> >          @Override
> >          protected String extrapolateChildUrl( String parentUrl,
> Map<Object,
> > Object> context ) {
> > -            Object artifactId = context.get( ARTIFACT_ID );
> > +            Object childDirectory = context.get( CHILD_DIRECTORY );
> >              Object childPathAdjustment = context.get(
> CHILD_PATH_ADJUSTMENT
> > );
> >
> > -            if ( artifactId != null && childPathAdjustment != null )
> > +            if ( childDirectory != null && childPathAdjustment != null )
> >              {
> > -                // append childPathAdjustment and artifactId to parent
> url
> > -                return appendPath( parentUrl, artifactId.toString(),
> > childPathAdjustment.toString() ); +                // append
> > childPathAdjustment and childDirectory to parent url +
> > return appendPath( parentUrl, childDirectory.toString(),
> > childPathAdjustment.toString() ); }
> >              else
> >              {
> > @@ -185,6 +192,37 @@ public class DefaultInheritanceAssembler
> >          }
> >
> >          @Override
> > +        protected void mergeModelBase_Properties( ModelBase target,
> > ModelBase source, boolean sourceDominant, +
> >                  Map<Object, Object> context ) +        {
> > +            Properties merged = new Properties();
> > +            if ( sourceDominant )
> > +            {
> > +                merged.putAll( target.getProperties() );
> > +                putAll( merged, source.getProperties(),
> > CHILD_DIRECTORY_PROPERTY ); +            }
> > +            else
> > +            {
> > +                merged.putAll( source.getProperties() );
> > +                putAll( merged, target.getProperties(),
> > CHILD_DIRECTORY_PROPERTY ); +            }
> > +            target.setProperties( merged );
> > +            target.setLocation( "properties", InputLocation.merge(
> > target.getLocation( "properties" ), +
> >                             source.getLocation( "properties" ),
> > sourceDominant ) ); +        }
> > +
> > +        private void putAll( Map<Object, Object> s, Map<Object, Object>
> t,
> > Object excludeKey ) +        {
> > +            for ( Map.Entry<Object, Object> e : t.entrySet() )
> > +            {
> > +                if ( !e.getKey().equals( excludeKey ) )
> > +                {
> > +                    s.put( e.getKey(), e.getValue() );
> > +                }
> > +            }
> > +        }
> > +
> > +        @Override
> >          protected void mergePluginContainer_Plugins( PluginContainer
> > target, PluginContainer source, boolean sourceDominant, Map<Object,
> Object>
> > context ) {
> >
> >
> http://git-wip-us.apache.org/repos/asf/maven/blob/812e1e9d/maven-model-build
> > er/src/site/apt/index.apt
> > ----------------------------------------------------------------------
> diff
> > --git a/maven-model-builder/src/site/apt/index.apt
> > b/maven-model-builder/src/site/apt/index.apt index 9a645f4..764f8c6
> 100644
> > --- a/maven-model-builder/src/site/apt/index.apt
> > +++ b/maven-model-builder/src/site/apt/index.apt
> > @@ -62,7 +62,7 @@ Maven Model Builder
> >
> >
> ({{{./xref/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.h
> > tml}source}}). Notice that <<<project.url>>>,
> <<<project.scm.connection>>>,
> > <<<project.scm.developerConnection>>>, <<<project.scm.url>>> and
> > <<<project.distributionManagement.site.url>>> have a special treatment:
> if
> > not overridden in child, the default value is parent's one -   with child
> > artifact id appended
> > +   with child artifact id appended, or <<<project.directory>>> property
> > value if directory is not equals to artifact id
> >
> >     ** model interpolation (see below)
> >
> >
> >
> http://git-wip-us.apache.org/repos/asf/maven/blob/812e1e9d/maven-model-build
> >
> er/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemb
> > lerTest.java
> > ----------------------------------------------------------------------
> diff
> > --git
> >
> a/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/Defa
> > ultInheritanceAssemblerTest.java
> >
> b/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/Defa
> > ultInheritanceAssemblerTest.java index f9e95ec..e3a2d50 100644
> > ---
> >
> a/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/Defa
> > ultInheritanceAssemblerTest.java +++
> >
> b/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/Defa
> > ultInheritanceAssemblerTest.java @@ -88,12 +88,35 @@ public class
> > DefaultInheritanceAssemblerTest
> >          try ( Reader control = new InputStreamReader( new
> FileInputStream(
> > expected ), "UTF-8" ); Reader test = new InputStreamReader( new
> > FileInputStream( actual ), "UTF-8" ) ) {
> > -
> >              XMLUnit.setIgnoreComments( true );
> >              XMLUnit.setIgnoreWhitespace( true );
> >              XMLAssert.assertXMLEqual( control, test );
> >          }
> > -
> >      }
> >
> > +    public void testModulePathNotArtifactId()
> > +        throws Exception
> > +    {
> > +        Model parent = getModel( "module-path-not-artifactId-parent" );
> > +
> > +        Model child = getModel( "module-path-not-artifactId-child" );
> > +
> > +        SimpleProblemCollector problems = new SimpleProblemCollector();
> > +
> > +        assembler.assembleModelInheritance( child, parent, null,
> problems
> > ); +
> > +        File actual = getTestFile(
> >
> "target/test-classes/poms/inheritance/module-path-not-artifactId-actual.xml
> > " ); +
> > +        writer.write( actual, null, child );
> > +
> > +        // check with getPom( "module-path-not-artifactId-effective" )
> > +        File expected = getPom( "module-path-not-artifactId-expected" );
> > +        try ( Reader control = new InputStreamReader( new
> FileInputStream(
> > expected ), "UTF-8" ); +              Reader test = new
> InputStreamReader(
> > new FileInputStream( actual ), "UTF-8" ) ) +        {
> > +            XMLUnit.setIgnoreComments( true );
> > +            XMLUnit.setIgnoreWhitespace( true );
> > +            XMLAssert.assertXMLEqual( control, test );
> > +        }
> > +    }
> >  }
> >
> >
> http://git-wip-us.apache.org/repos/asf/maven/blob/812e1e9d/maven-model-build
> >
> er/src/test/resources/poms/inheritance/module-path-not-artifactId-child.xml
> > ----------------------------------------------------------------------
> diff
> > --git
> >
> a/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-a
> > rtifactId-child.xml
> >
> b/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-a
> > rtifactId-child.xml new file mode 100644
> > index 0000000..7031f44
> > --- /dev/null
> > +++
> >
> b/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-a
> > rtifactId-child.xml @@ -0,0 +1,43 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +
> > +<!--
> > +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.
> > +-->
> > +
> > +<project xmlns="http://maven.apache.org/POM/4.0.0";
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; +
> > xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> > http://maven.apache.org/xsd/maven-4.0.0.xsd";> +
> > <modelVersion>4.0.0</modelVersion>
> > +
> > +  <parent>
> > +    <groupId>inheritance</groupId>
> > +    <artifactId>parent</artifactId>
> > +    <version>11-SNAPSHOT</version>
> > +  </parent>
> > +
> > +  <artifactId>child-artifact-id</artifactId>
> > +  <name>Model inheritance test parent: module directory !=
> > artifactId</name> +  <description>
> > +    artifactId == "child-artifact-id"
> > +    but expect path on SCM and site == "child"
> > +    feature: support "project.directory" property, ressembling future
> model
> > addition of "directory" element along "artifactId" +  </description>
> > +
> > +  <properties>
> > +    <project.directory>child</project.directory>
> > +  </properties>
> > +</project>
> > \ No newline at end of file
> >
> >
> http://git-wip-us.apache.org/repos/asf/maven/blob/812e1e9d/maven-model-build
> >
> er/src/test/resources/poms/inheritance/module-path-not-artifactId-expected.x
> > ml ----------------------------------------------------------------------
> > diff --git
> >
> a/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-a
> > rtifactId-expected.xml
> >
> b/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-a
> > rtifactId-expected.xml new file mode 100644
> > index 0000000..38d9406
> > --- /dev/null
> > +++
> >
> b/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-a
> > rtifactId-expected.xml @@ -0,0 +1,44 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +
> > +<!--
> > +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.
> > +-->
> > +
> > +<project xmlns="http://maven.apache.org/POM/4.0.0";
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; +
> > xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> > http://maven.apache.org/xsd/maven-4.0.0.xsd";> +
> > <modelVersion>4.0.0</modelVersion>
> > +
> > +  <parent>
> > +    <groupId>inheritance</groupId>
> > +    <artifactId>parent</artifactId>
> > +    <version>11-SNAPSHOT</version>
> > +  </parent>
> > +
> > +  <groupId>inheritance</groupId>
> > +  <artifactId>child-artifact-id</artifactId>
> > +  <version>11-SNAPSHOT</version>
> > +  <name>Model inheritance test parent: module directory !=
> > artifactId</name> +  <description>
> > +    artifactId == "child-artifact-id"
> > +    but expect path on SCM and site == "child"
> > +    feature: support "project.directory" property, ressembling future
> model
> > addition of "directory" element along "artifactId" +  </description>
> > +
> > +  <url>http://www.apache.org/child/</url>
> > +
> > +</project>
> >
> >
> http://git-wip-us.apache.org/repos/asf/maven/blob/812e1e9d/maven-model-build
> >
> er/src/test/resources/poms/inheritance/module-path-not-artifactId-parent.xml
> > ----------------------------------------------------------------------
> diff
> > --git
> >
> a/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-a
> > rtifactId-parent.xml
> >
> b/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-a
> > rtifactId-parent.xml new file mode 100644
> > index 0000000..d29d78c
> > --- /dev/null
> > +++
> >
> b/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-a
> > rtifactId-parent.xml @@ -0,0 +1,37 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +
> > +<!--
> > +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.
> > +-->
> > +
> > +<project xmlns="http://maven.apache.org/POM/4.0.0";
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; +
> > xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> > http://maven.apache.org/xsd/maven-4.0.0.xsd";> +
> > <modelVersion>4.0.0</modelVersion>
> > +
> > +  <groupId>inheritance</groupId>
> > +  <artifactId>parent</artifactId>
> > +  <version>11-SNAPSHOT</version>
> > +
> > +  <name>Model inheritance test parent: module path != artifactId</name>
> > +  <url>http://www.apache.org/</url>
> > +
> > +  <modules>
> > +    <module>child</module>
> > +  </modules>
> > +
> > +</project>
> > \ No newline at end of file
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to