Author: jdcasey Date: Thu Aug 14 16:29:50 2008 New Revision: 686087 URL: http://svn.apache.org/viewvc?rev=686087&view=rev Log: [MNG-3716] Detecting aggregator mojos that fork lifecycles, and generating executed projects for all reactor projects in this case. Also adding integration test for this issue.
Added: maven/core-integration-testing/trunk/core-integration-tests/src/test/java/org/apache/maven/integrationtests/MavenITmng3716AggregatorForkingTest.java maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/pom.xml maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/src/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/src/main/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/src/main/java/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/src/main/java/jar/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/src/main/java/jar/MyMojo.java maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/pom.xml maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/main/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/main/java/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/main/java/jar/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/main/java/jar/App.java maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/test/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/test/java/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/test/java/jar/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/test/java/jar/AppTest.java maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/pom.xml maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/main/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/main/java/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/main/java/jar/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/main/java/jar/App.java maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/test/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/test/java/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/test/java/jar/ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/test/java/jar/AppTest.java maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/pom.xml Modified: maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java maven/core-integration-testing/trunk/core-integration-tests/src/test/java/org/apache/maven/integrationtests/IntegrationTestSuite.java Modified: maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=686087&r1=686086&r2=686087&view=diff ============================================================================== --- maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original) +++ maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Thu Aug 14 16:29:50 2008 @@ -63,8 +63,10 @@ import org.apache.maven.plugin.lifecycle.Phase; import org.apache.maven.plugin.version.PluginVersionNotFoundException; import org.apache.maven.plugin.version.PluginVersionResolutionException; +import org.apache.maven.project.DefaultProjectBuilderConfiguration; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; +import org.apache.maven.project.ProjectBuilderConfiguration; import org.apache.maven.project.ProjectBuildingException; import org.apache.maven.project.artifact.InvalidDependencyVersionException; import org.apache.maven.project.interpolation.ModelInterpolationException; @@ -602,11 +604,20 @@ if ( hasFork ) { - MavenProject executionProject = new MavenProject( project ); + createExecutionProject( project, session ); - calculateConcreteState( executionProject, session ); - - project.setExecutionProject( executionProject ); + if ( mojoDescriptor.isAggregator() ) + { + List reactorProjects = session.getSortedProjects(); + for ( Iterator it = reactorProjects.iterator(); it.hasNext(); ) + { + MavenProject reactorProject = (MavenProject) it.next(); + if ( reactorProject.getExecutionProject() == null ) + { + createExecutionProject( reactorProject, session ); + } + } + } } if ( mojoDescriptor.getExecutePhase() != null || mojoDescriptor.getExecuteGoal() != null ) @@ -644,6 +655,16 @@ { // TODO: Would be nice to find a way to cause the execution project to stay in a concrete state... calculateConcreteState( project.getExecutionProject(), session ); + + if ( mojoDescriptor.isAggregator() ) + { + List reactorProjects = session.getSortedProjects(); + for ( Iterator it = reactorProjects.iterator(); it.hasNext(); ) + { + MavenProject reactorProject = (MavenProject) it.next(); + calculateConcreteState( reactorProject.getExecutionProject(), session ); + } + } } try @@ -680,7 +701,20 @@ throw new LifecycleExecutionException( e.getMessage(), e ); } - project.setExecutionProject( null ); + if ( hasFork ) + { + project.setExecutionProject( null ); + + if ( mojoDescriptor.isAggregator() ) + { + List reactorProjects = session.getSortedProjects(); + for ( Iterator it = reactorProjects.iterator(); it.hasNext(); ) + { + MavenProject reactorProject = (MavenProject) it.next(); + reactorProject.setExecutionProject( null ); + } + } + } restoreDynamicState( project, session ); @@ -691,6 +725,16 @@ } } + private void createExecutionProject( MavenProject project, MavenSession session ) + throws LifecycleExecutionException + { + MavenProject executionProject = new MavenProject( project ); + + calculateConcreteState( executionProject, session ); + + project.setExecutionProject( executionProject ); + } + private boolean usesSessionOrReactorProjects( PlexusConfiguration configuration ) { String value = null; @@ -1011,7 +1055,7 @@ for ( Iterator i = session.getSortedProjects().iterator(); i.hasNext(); ) { MavenProject reactorProject = (MavenProject) i.next(); - + line(); getLogger().info( "Building " + reactorProject.getName() ); Modified: maven/core-integration-testing/trunk/core-integration-tests/src/test/java/org/apache/maven/integrationtests/IntegrationTestSuite.java URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-integration-tests/src/test/java/org/apache/maven/integrationtests/IntegrationTestSuite.java?rev=686087&r1=686086&r2=686087&view=diff ============================================================================== --- maven/core-integration-testing/trunk/core-integration-tests/src/test/java/org/apache/maven/integrationtests/IntegrationTestSuite.java (original) +++ maven/core-integration-testing/trunk/core-integration-tests/src/test/java/org/apache/maven/integrationtests/IntegrationTestSuite.java Thu Aug 14 16:29:50 2008 @@ -76,6 +76,7 @@ MavenITmng3645POMSyntaxErrorTest */ + suite.addTestSuite( MavenITmng3716AggregatorForkingTest.class ); suite.addTestSuite( MavenITmng3710PollutedClonedPluginsTest.class ); suite.addTestSuite( MavenITmng3704LifecycleExecutorWrapperTest.class ); suite.addTestSuite( MavenITmng3703ExecutionProjectWithRelativePathsTest.class ); Added: maven/core-integration-testing/trunk/core-integration-tests/src/test/java/org/apache/maven/integrationtests/MavenITmng3716AggregatorForkingTest.java URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-integration-tests/src/test/java/org/apache/maven/integrationtests/MavenITmng3716AggregatorForkingTest.java?rev=686087&view=auto ============================================================================== --- maven/core-integration-testing/trunk/core-integration-tests/src/test/java/org/apache/maven/integrationtests/MavenITmng3716AggregatorForkingTest.java (added) +++ maven/core-integration-testing/trunk/core-integration-tests/src/test/java/org/apache/maven/integrationtests/MavenITmng3716AggregatorForkingTest.java Thu Aug 14 16:29:50 2008 @@ -0,0 +1,67 @@ +/* + * 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. + */ + +package org.apache.maven.integrationtests; + +import java.io.File; + +import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; +import org.apache.maven.it.Verifier; +import org.apache.maven.it.util.ResourceExtractor; + +/** + * This is a test set for <a href="http://jira.codehaus.org/browse/MNG-3716">MNG-3716</a>. + * + * @todo Fill in a better description of what this test verifies! + * + * @author <a href="mailto:[EMAIL PROTECTED]">Brian Fox</a> + * @author jdcasey + * + */ +public class MavenITmng3716AggregatorForkingTest + extends AbstractMavenIntegrationTestCase +{ + public MavenITmng3716AggregatorForkingTest() + throws InvalidVersionSpecificationException + { + super( "(2.0.8,)" ); // only test in 2.0.9+ + } + + public void testitMNG3716 () + throws Exception + { + File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-3716-aggregatorForking" ); + File pluginDir = new File( testDir, "maven-mng3716-plugin" ); + File projectsDir = new File( testDir, "projects" ); + + Verifier verifier; + + verifier = new Verifier( pluginDir.getAbsolutePath() ); + verifier.executeGoal( "install" ); + + verifier.verifyErrorFreeLog(); + verifier.resetStreams(); + + verifier = new Verifier( projectsDir.getAbsolutePath() ); + verifier.executeGoal( "org.apache.maven.its.mng3716:maven-mng3716-plugin:1:run" ); + + verifier.verifyErrorFreeLog(); + verifier.resetStreams(); + } +} Added: maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/pom.xml URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/pom.xml?rev=686087&view=auto ============================================================================== --- maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/pom.xml (added) +++ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/pom.xml Thu Aug 14 16:29:50 2008 @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?><project> + <modelVersion>4.0.0</modelVersion> + <groupId>org.apache.maven.its.mng3716</groupId> + <artifactId>maven-mng3716-plugin</artifactId> + <packaging>maven-plugin</packaging> + <name>maven-mng3716-plugin Maven Mojo</name> + <version>1</version> + <url>http://maven.apache.org</url> + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + <version>2.0</version> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + <scope>test</scope> + </dependency> + </dependencies> +</project> \ No newline at end of file Added: maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/src/main/java/jar/MyMojo.java URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/src/main/java/jar/MyMojo.java?rev=686087&view=auto ============================================================================== --- maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/src/main/java/jar/MyMojo.java (added) +++ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/maven-mng3716-plugin/src/main/java/jar/MyMojo.java Thu Aug 14 16:29:50 2008 @@ -0,0 +1,35 @@ +package jar; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed 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. + */ + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; + +/** + * @goal run + * @aggregator + * @execute phase="package" + */ +public class MyMojo + extends AbstractMojo +{ + public void execute() + throws MojoExecutionException + { + getLog().info( "Aggregator mojo executed." ); + } +} Added: maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/pom.xml URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/pom.xml?rev=686087&view=auto ============================================================================== --- maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/pom.xml (added) +++ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/pom.xml Thu Aug 14 16:29:50 2008 @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><project> + <parent> + <artifactId>projects</artifactId> + <groupId>org.apache.maven.its.mng3716</groupId> + <version>1</version> + </parent> + <modelVersion>4.0.0</modelVersion> + <groupId>org.apache.maven.its.mng3716</groupId> + <artifactId>child1</artifactId> + <name>child1</name> + <version>1</version> + <url>http://maven.apache.org</url> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + <scope>test</scope> + </dependency> + </dependencies> +</project> \ No newline at end of file Added: maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/main/java/jar/App.java URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/main/java/jar/App.java?rev=686087&view=auto ============================================================================== --- maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/main/java/jar/App.java (added) +++ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/main/java/jar/App.java Thu Aug 14 16:29:50 2008 @@ -0,0 +1,13 @@ +package jar; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} Added: maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/test/java/jar/AppTest.java URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/test/java/jar/AppTest.java?rev=686087&view=auto ============================================================================== --- maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/test/java/jar/AppTest.java (added) +++ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child1/src/test/java/jar/AppTest.java Thu Aug 14 16:29:50 2008 @@ -0,0 +1,38 @@ +package jar; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} Added: maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/pom.xml URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/pom.xml?rev=686087&view=auto ============================================================================== --- maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/pom.xml (added) +++ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/pom.xml Thu Aug 14 16:29:50 2008 @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?><project> + <parent> + <artifactId>projects</artifactId> + <groupId>org.apache.maven.its.mng3716</groupId> + <version>1</version> + </parent> + <modelVersion>4.0.0</modelVersion> + <groupId>org.apache.maven.its.mng3716</groupId> + <artifactId>child2</artifactId> + <name>child2</name> + <version>1</version> + <url>http://maven.apache.org</url> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + <scope>test</scope> + </dependency> + </dependencies> +</project> \ No newline at end of file Added: maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/main/java/jar/App.java URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/main/java/jar/App.java?rev=686087&view=auto ============================================================================== --- maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/main/java/jar/App.java (added) +++ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/main/java/jar/App.java Thu Aug 14 16:29:50 2008 @@ -0,0 +1,13 @@ +package jar; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} Added: maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/test/java/jar/AppTest.java URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/test/java/jar/AppTest.java?rev=686087&view=auto ============================================================================== --- maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/test/java/jar/AppTest.java (added) +++ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/child2/src/test/java/jar/AppTest.java Thu Aug 14 16:29:50 2008 @@ -0,0 +1,38 @@ +package jar; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} Added: maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/pom.xml URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/pom.xml?rev=686087&view=auto ============================================================================== --- maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/pom.xml (added) +++ maven/core-integration-testing/trunk/core-integration-tests/src/test/resources/mng-3716-aggregatorForking/projects/pom.xml Thu Aug 14 16:29:50 2008 @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<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/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>org.apache.maven.its.mng3716</groupId> + <artifactId>projects</artifactId> + <version>1</version> + <packaging>pom</packaging> + <modules> + <module>child1</module> + <module>child2</module> + </modules> +</project>