Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Duplicate
-
Affects Version/s: 2.0.9
-
Fix Version/s: None
-
Component/s: Profiles
-
Labels:None
-
Complexity:Intermediate
-
Number of attachments :
Description
Consider the following POM:
<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>test</groupId>
<artifactId>test</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>test</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<profiles>
<profile>
<id>yuck</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>no-such-plugin</groupId>
<artifactId>just-to-cause-error</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
I'd like to deactivate the "yuck" profile that kicks in by default. I cannot do this even if I run "mvn -P -yuck".
This is because the DefaultProfileManager.getActiveProfiles() is implemented as follows:
public List getActiveProfiles()
throws ProfileActivationException
{
List activeFromPom = new ArrayList();
List activeExternal = new ArrayList();
for ( Iterator it = profilesById.entrySet().iterator(); it.hasNext(); )
{
Map.Entry entry = (Entry) it.next();
String profileId = (String) entry.getKey();
Profile profile = (Profile) entry.getValue();
boolean shouldAdd = false;
if ( activatedIds.contains( profileId ) )
{
shouldAdd = true;
}
else if ( !deactivatedIds.contains( profileId ) && isActive( profile ) )
{
shouldAdd = true;
}
if ( shouldAdd )
{
if ( "pom".equals( profile.getSource() ) )
{
activeFromPom.add( profile );
}
else
{
activeExternal.add( profile );
}
}
}
if ( activeFromPom.isEmpty() )
{
for ( Iterator it = defaultIds.iterator(); it.hasNext(); )
{
String profileId = (String) it.next();
Profile profile = (Profile) profilesById.get( profileId );
activeFromPom.add( profile );
}
}
List allActive = new ArrayList( activeFromPom.size() + activeExternal.size() );
allActive.addAll( activeExternal );
allActive.addAll( activeFromPom );
return allActive;
}
... and therefore the defaultIds set (which contains "yuck") is considered active, even if deactivatedIds contain them. The fix should be obvious by now.
Duplicates the issues
MNG-3527andMNG-3545, which have been fixed in 2.0.10.MNG-3527andMNG-3545, which have been fixed in 2.0.10.