You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2021/05/26 18:14:36 UTC

[maven-enforcer] 01/01: [MENFORCER-257] RequireActiveProfile should respect inherited activated profiles

This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch MENFORCER-257
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git

commit eadd63210b0d640b0b2b2672d4499a1771ff4052
Author: rfscholte <rf...@apache.org>
AuthorDate: Wed May 26 20:14:07 2021 +0200

    [MENFORCER-257] RequireActiveProfile should respect inherited activated profiles
---
 .../plugins/enforcer/RequireActiveProfile.java     | 27 +++++------
 .../plugins/enforcer/RequireActiveProfileTest.java | 48 +++++++++----------
 .../invoker.properties                             | 18 ++++++++
 .../parent/pom.xml                                 | 54 ++++++++++++++++++++++
 .../require-active-profile-inherited/pom.xml       | 30 ++++++++++++
 5 files changed, 135 insertions(+), 42 deletions(-)

diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireActiveProfile.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireActiveProfile.java
index 31fde9c..20f8def 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireActiveProfile.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireActiveProfile.java
@@ -21,10 +21,10 @@ package org.apache.maven.plugins.enforcer;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
-import org.apache.maven.model.Profile;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
 import org.codehaus.plexus.util.StringUtils;
@@ -82,19 +82,19 @@ public class RequireActiveProfile
             MavenProject project = (MavenProject) theHelper.evaluate( "${project}" );
             if ( StringUtils.isNotEmpty( profiles ) )
             {
-                String[] profs = profiles.split( "," );
-                for ( String profile : profs )
+                String[] profileIds = profiles.split( "," );
+                for ( String profileId : profileIds )
                 {
-                    if ( !isProfileActive( project, profile ) )
+                    if ( !isProfileActive( project, profileId ) )
                     {
-                        missingProfiles.add( profile );
+                        missingProfiles.add( profileId );
                     }
                 }
 
                 boolean fail = false;
                 if ( !missingProfiles.isEmpty() )
                 {
-                    if ( all || missingProfiles.size() == profs.length )
+                    if ( all || missingProfiles.size() == profileIds.length )
                     {
                       fail = true;
                     }
@@ -131,23 +131,18 @@ public class RequireActiveProfile
      * Checks if profile is active.
      *
      * @param project the project
-     * @param profileName the profile name
+     * @param profileId the profile name
      * @return <code>true</code> if profile is active, otherwise <code>false</code>
      */
-    protected boolean isProfileActive( MavenProject project, String profileName )
+    protected boolean isProfileActive( MavenProject project, String profileId )
     {
-        List<Profile> activeProfiles = project.getActiveProfiles();
-        if ( activeProfiles != null && !activeProfiles.isEmpty() )
+        for ( Map.Entry<String, List<String>> entry : project.getInjectedProfileIds().entrySet() )
         {
-            for ( Profile profile : activeProfiles )
+            if ( entry.getValue().contains( profileId ) )
             {
-                if ( profile.getId().equals( profileName ) )
-                {
-                    return true;
-                }
+                return true;
             }
         }
-
         return false;
     }
 }
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/RequireActiveProfileTest.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/RequireActiveProfileTest.java
index f312119..6fd9897 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/RequireActiveProfileTest.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/RequireActiveProfileTest.java
@@ -19,17 +19,16 @@ package org.apache.maven.plugins.enforcer;
  * under the License.
  */
 
-import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
-import org.apache.maven.model.Profile;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
 import org.junit.Before;
@@ -62,7 +61,7 @@ public class RequireActiveProfileTest
     public void testNoActiveProfilesInProjectAndNoProfilesExpectedToBeActivated()
         throws EnforcerRuleException
     {
-        when( project.getActiveProfiles() ).thenReturn( Collections.<Profile> emptyList() );
+        when( project.getInjectedProfileIds() ).thenReturn( Collections.<String, List<String>>emptyMap() );
 
         rule.execute( helper );
     }
@@ -71,9 +70,10 @@ public class RequireActiveProfileTest
     public void testActiveProfileAndExpectedActiveProfile()
         throws EnforcerRuleException
     {
-        List<Profile> profiles = Collections.<Profile> singletonList( createProfile( "profile-2" ) );
+        Map<String, List<String>> profiles =
+            Collections.<String, List<String>>singletonMap( "pom", Arrays.asList( "profile-2" ) );
 
-        when( project.getActiveProfiles() ).thenReturn( profiles );
+        when( project.getInjectedProfileIds() ).thenReturn( profiles );
 
         rule.setProfiles( "profile-2" );
 
@@ -84,7 +84,7 @@ public class RequireActiveProfileTest
     public void testNoActiveProfileButTheRuleRequestedAnActiveProfile()
         throws EnforcerRuleException
     {
-        when( project.getActiveProfiles() ).thenReturn( Collections.<Profile> emptyList() );
+        when( project.getInjectedProfileIds() ).thenReturn( Collections.<String, List<String>>emptyMap() );
 
         rule.setProfiles( "profile-2" );
 
@@ -96,7 +96,7 @@ public class RequireActiveProfileTest
     public void testNoActiveProfileButWeExpectToGetAnExceptionWithAll()
         throws EnforcerRuleException
     {
-        when( project.getActiveProfiles() ).thenReturn( Collections.<Profile> emptyList() );
+        when( project.getInjectedProfileIds() ).thenReturn( Collections.<String, List<String>>emptyMap() );
 
         rule.setProfiles( "profile-2" );
         rule.setAll( true );
@@ -109,9 +109,10 @@ public class RequireActiveProfileTest
     public void testTwoActiveProfilesWithOneRequiredProfile()
         throws EnforcerRuleException
     {
-        List<Profile> profiles = Arrays.asList( createProfile( "profile-1" ), createProfile( "profile-2" ) );
+        Map<String, List<String>> profiles =
+            Collections.singletonMap( "pom", Arrays.asList( "profile-1", "profile-2" ) );
 
-        when( project.getActiveProfiles() ).thenReturn( profiles );
+        when( project.getInjectedProfileIds() ).thenReturn( profiles );
 
         rule.setProfiles( "profile-2" );
 
@@ -122,9 +123,10 @@ public class RequireActiveProfileTest
     public void testTwoActiveProfilesWhereOneProfileIsRequiredToBeActivated()
         throws EnforcerRuleException
     {
-        List<Profile> profiles = Arrays.asList( createProfile( "profile-1" ), createProfile( "profile-2" ) );
+        Map<String, List<String>> profiles =
+                        Collections.singletonMap( "pom", Arrays.asList( "profile-1", "profile-2" ) );
 
-        when( project.getActiveProfiles() ).thenReturn( profiles );
+        when( project.getInjectedProfileIds() ).thenReturn( profiles );
 
         rule.setProfiles( "profile-2" );
         rule.setAll( true );
@@ -136,10 +138,10 @@ public class RequireActiveProfileTest
     public void testTwoActiveProfilesWithTwoRequiredProfilesWhereOneOfThemIsNotPartOfTheActiveProfiles()
         throws EnforcerRuleException, ExpressionEvaluationException
     {
+        Map<String, List<String>> profiles =
+                        Collections.singletonMap( "pom", Arrays.asList( "profile-X", "profile-Y" ) );
 
-        List<Profile> profiles = Arrays.asList( createProfile( "profile-X" ), createProfile( "profile-Y" ) );
-
-        when( project.getActiveProfiles() ).thenReturn( profiles );
+        when( project.getInjectedProfileIds() ).thenReturn( profiles );
 
         rule.setProfiles( "profile-Z,profile-X" );
         rule.setAll( true );
@@ -152,9 +154,10 @@ public class RequireActiveProfileTest
     public void testOneActiveProfilesWithTwoRequiredProfiles()
         throws EnforcerRuleException, ExpressionEvaluationException
     {
-        List<Profile> profiles = Collections.singletonList( createProfile( "profile-X" ) );
+        Map<String, List<String>> profiles =
+                        Collections.singletonMap( "pom", Arrays.asList( "profile-X" ) );
 
-        when( project.getActiveProfiles() ).thenReturn( profiles );
+        when( project.getInjectedProfileIds() ).thenReturn( profiles );
 
         rule.setProfiles( "profile-X,profile-Y" );
         rule.setAll( true );
@@ -167,9 +170,10 @@ public class RequireActiveProfileTest
     public void testOneActiveProfileWithTwoProfilesButNotAll()
         throws EnforcerRuleException, ExpressionEvaluationException
     {
-        List<Profile> profiles = Collections.singletonList( createProfile( "profile-X" ) );
+        Map<String, List<String>> profiles =
+                        Collections.singletonMap( "pom", Arrays.asList( "profile-X" ) );
 
-        when( project.getActiveProfiles() ).thenReturn( profiles );
+        when( project.getInjectedProfileIds() ).thenReturn( profiles );
 
         rule.setProfiles( "profile-X,profile-Y" );
         rule.setAll( false );
@@ -177,12 +181,4 @@ public class RequireActiveProfileTest
         rule.execute( helper );
         // intentionally no assertTrue(..)
     }
-
-    private Profile createProfile( String profileId )
-    {
-        Profile p = new Profile();
-        p.setId( profileId );
-        return p;
-    }
-
 }
diff --git a/maven-enforcer-plugin/src/it/projects/require-active-profile-inherited/invoker.properties b/maven-enforcer-plugin/src/it/projects/require-active-profile-inherited/invoker.properties
new file mode 100644
index 0000000..3018994
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-active-profile-inherited/invoker.properties
@@ -0,0 +1,18 @@
+# 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.
+
+invoker.goals = help:active-profiles enforcer:enforce
\ No newline at end of file
diff --git a/maven-enforcer-plugin/src/it/projects/require-active-profile-inherited/parent/pom.xml b/maven-enforcer-plugin/src/it/projects/require-active-profile-inherited/parent/pom.xml
new file mode 100644
index 0000000..d3e1838
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-active-profile-inherited/parent/pom.xml
@@ -0,0 +1,54 @@
+<?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>org.apache.maven.plugins.enforcer.it</groupId>
+  <artifactId>parent</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <rules>
+            <requireActiveProfile >
+              <profiles>active-by-default</profiles>
+            </requireActiveProfile>
+          </rules>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  
+  <profiles>
+    <profile>
+      <id>active-by-default</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+    </profile>
+  </profiles>
+  
+</project>
diff --git a/maven-enforcer-plugin/src/it/projects/require-active-profile-inherited/pom.xml b/maven-enforcer-plugin/src/it/projects/require-active-profile-inherited/pom.xml
new file mode 100644
index 0000000..c7f9b38
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-active-profile-inherited/pom.xml
@@ -0,0 +1,30 @@
+<?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>org.apache.maven.plugins.enforcer.it</groupId>
+    <artifactId>parent</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>parent/pom.xml</relativePath>
+  </parent>
+  <artifactId>menforcer257</artifactId>
+</project>