[MNG-2174] plugin management dependencies.

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@762892 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Britton Isbell 2009-04-07 18:27:37 +00:00
parent 81bd2d7cd1
commit 6c6513cad3
5 changed files with 177 additions and 40 deletions

View File

@ -95,7 +95,6 @@ public class ProcessorContext
}
}
profileModels.addAll(externalProfileModels);//external takes precedence
// Collections.reverse( profileModels );
Model model = domainModel.getModel();
profileModels.add( 0, model );
@ -118,11 +117,23 @@ public class ProcessorContext
}
DependencyManagement depMng = model.getDependencyManagement();
model.setDependencyManagement( depMng );
Model target = processModelsForInheritance(profileModels, processors);
//TODO: Merge
target.getBuild().setPluginManagement( mng );
PluginsManagementProcessor pmp = new PluginsManagementProcessor();
if( mng != null )
{
if(target.getBuild().getPluginManagement() != null)
{
pmp.process(null, mng.getPlugins(), target.getBuild().getPluginManagement().getPlugins(), false);
}
else
{
target.getBuild().setPluginManagement( mng );
}
}
//TODO: Merge Dependency Management
target.setDependencyManagement( depMng );
PomClassicDomainModel targetModel = convertToDomainModel( target, domainModel.isMostSpecialized());
@ -578,13 +589,25 @@ public class ProcessorContext
b.setDirectory( base.getDirectory() );
b.setFilters( new ArrayList<String>(base.getFilters()) );
b.setFinalName( base.getFinalName() );
b.setPluginManagement( base.getPluginManagement() );
b.setPluginManagement( copyPluginManagement(base.getPluginManagement()) );
b.setPlugins( copyPlugins(base.getPlugins()) );
b.setResources( new ArrayList<Resource>(base.getResources()) );
b.setTestResources( new ArrayList<Resource>(base.getTestResources()) );
return b;
}
private static PluginManagement copyPluginManagement(PluginManagement mng)
{
if(mng == null)
{
return null;
}
PluginManagement pm = new PluginManagement();
pm.setPlugins(copyPlugins(mng.getPlugins()));
return pm;
}
private static List<Plugin> copyPlugins(List<Plugin> plugins)
{
List<Plugin> ps = new ArrayList<Plugin>();

View File

@ -20,29 +20,14 @@ package org.apache.maven.project.processor;
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.maven.model.BuildBase;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.PluginExecution;
import org.apache.maven.model.Profile;
import org.apache.maven.model.Resource;
public class ProfilesProcessor extends BaseProcessor
{
private static List<Processor> processors =
Arrays.<Processor> asList( new BuildProcessor( new ArrayList<Processor>() ), new ModuleProcessor(),
new PropertiesProcessor(), new ParentProcessor(), new OrganizationProcessor(),
new MailingListProcessor(), new IssueManagementProcessor(),
new CiManagementProcessor(), new ReportingProcessor(),
new RepositoriesProcessor(), new DistributionManagementProcessor(),
new LicensesProcessor(), new ScmProcessor(), new PrerequisitesProcessor(),
new ContributorsProcessor(), new DevelopersProcessor());
{
public void process( Object parent, Object child, Object target, boolean isChildMostSpecialized )
{
super.process( parent, child, target, isChildMostSpecialized );
@ -53,24 +38,7 @@ public class ProfilesProcessor extends BaseProcessor
{
copies.add( ProcessorContext.copyOfProfile(p) );
}
t.setProfiles( copies );
t.setProfiles( copies );
//TODO - copy
}
private static Model attachProfileNodesToModel(Profile profile)
{
Model model = new Model();
model.setModules( new ArrayList<String>(profile.getModules()) );
model.setDependencies(new ArrayList<Dependency>(profile.getDependencies()));
model.setDependencyManagement( profile.getDependencyManagement());
model.setDistributionManagement( profile.getDistributionManagement() );
model.setProperties( profile.getProperties() );
model.setModules( new ArrayList<String>(profile.getModules() ) );
BuildProcessor proc = new BuildProcessor( new ArrayList<Processor>());
proc.processWithProfile( profile.getBuild(), model);
return model;
}
}

View File

@ -1248,7 +1248,6 @@ public class PomConstructionTest
{
PomTestWrapper pom =
buildPom( "profile-injection-order", "pom-a", "pom-b", "pom-e", "pom-c", "pom-d" );
//System.out.println(pom.getDomainModel().asString());
assertEquals( "e", pom.getValue( "properties[1]/pomProperty" ) );
}
@ -1314,6 +1313,14 @@ public class PomConstructionTest
assertEquals("c", pom.getValue( "build/extensions[3]/artifactId" ) );
}
/* MNG-2174 */
public void testProfilePluginMngDependencies()
throws Exception
{
PomTestWrapper pom = buildPom( "profile-plugin-mng-dependencies/sub" , "maven-core-it");
assertEquals("a", pom.getValue( "build/plugins[1]/dependencies[1]/artifactId" ) );
}
/** MNG-4116 */
public void testPercentEncodedUrlsMustNotBeDecoded()
throws Exception

View File

@ -0,0 +1,77 @@
<?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>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.its.mng2174</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Maven Integration Test :: MNG-2174</name>
<description>
Verify that plugin dependencies defined by plugin management of a parent profile are not lost when the
parent's main plugin management section is also present.
</description>
<modules>
<module>sub</module>
</modules>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.its.plugins</groupId>
<artifactId>maven-it-plugin-class-loader</artifactId>
<version>2.1-SNAPSHOT</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<profiles>
<profile>
<id>maven-core-it</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.its.plugins</groupId>
<artifactId>maven-it-plugin-class-loader</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.maven.its.mng2174</groupId>
<artifactId>a</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
</profiles>
</project>

View File

@ -0,0 +1,62 @@
<?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>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.maven.its.mng2174</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>org.apache.maven.its.mng2174</groupId>
<artifactId>child</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Integration Test :: MNG-2174</name>
<description>
Verify that plugin dependencies defined by plugin management of a parent profile are not lost when the
parent's main plugin management section is also present.
</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.its.plugins</groupId>
<artifactId>maven-it-plugin-class-loader</artifactId>
<executions>
<execution>
<id>test</id>
<phase>validate</phase>
<configuration>
<resourcePaths>mng-2174.properties</resourcePaths>
<pluginClassLoaderOutput>target/pcl.properties</pluginClassLoaderOutput>
</configuration>
<goals>
<goal>load</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>