You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kh...@apache.org on 2018/01/05 23:39:51 UTC

[maven-enforcer] branch MENFORCER-268-ci-friendly created (now 77830cc)

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

khmarbaise pushed a change to branch MENFORCER-268-ci-friendly
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git.


      at 77830cc  [MENFORCER-268] Usage of CI friendly version placeholders does not work  o Changed the implementation to use the Maven 3    based reading instead of hand made reading of pom files.

This branch includes the following new commits:

     new 77830cc  [MENFORCER-268] Usage of CI friendly version placeholders does not work  o Changed the implementation to use the Maven 3    based reading instead of hand made reading of pom files.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


-- 
To stop receiving notification emails like this one, please contact
['"commits@maven.apache.org" <co...@maven.apache.org>'].

[maven-enforcer] 01/01: [MENFORCER-268] Usage of CI friendly version placeholders does not work o Changed the implementation to use the Maven 3 based reading instead of hand made reading of pom files.

Posted by kh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

khmarbaise pushed a commit to branch MENFORCER-268-ci-friendly
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git

commit 77830ccf45bf76d1a1ddbad31925cf7d048d74c9
Author: Karl Heinz Marbaise <kh...@apache.org>
AuthorDate: Mon Jan 1 12:20:19 2018 +0100

    [MENFORCER-268] Usage of CI friendly version placeholders does not work
     o Changed the implementation to use the Maven 3
       based reading instead of hand made reading of pom files.
---
 .../plugins/enforcer/RequireNoRepositories.java    |  45 ++-
 .../enforcer/TestRequireNoRepositories.java        | 326 +++++++++++++--------
 .../invoker.properties                             |  18 ++
 .../pom.xml                                        |  70 +++++
 .../verify.groovy                                  |  22 ++
 .../invoker.properties                             |  18 ++
 .../require-no-repositories-allow-repo/pom.xml     |  70 +++++
 .../verify.groovy                                  |  22 ++
 .../it/projects/require-no-repositories/pom.xml    |   1 +
 .../invoker.properties                             |  18 ++
 .../pom.xml                                        |  70 +++++
 .../verify.groovy                                  |  22 ++
 .../invoker.properties                             |  18 ++
 .../pom.xml                                        | 114 +++----
 .../verify.groovy                                  |  22 ++
 .../invoker.properties                             |  18 ++
 .../pom.xml                                        |  70 +++++
 .../verify.groovy                                  |  22 ++
 .../child}/pom.xml                                 |  34 +--
 .../pom.xml                                        |   5 +
 20 files changed, 776 insertions(+), 229 deletions(-)

diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireNoRepositories.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireNoRepositories.java
index cc5073d..9d7cbfc 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireNoRepositories.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireNoRepositories.java
@@ -19,23 +19,19 @@ package org.apache.maven.plugins.enforcer;
  * under the License.
  */
 
-import java.io.File;
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Repository;
-import org.apache.maven.plugins.enforcer.utils.EnforcerRuleUtils;
+import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
 import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 /**
  * This rule checks that this pom or its parents don't define a repository.
@@ -117,20 +113,29 @@ public class RequireNoRepositories
         this.allowSnapshotPluginRepositories = allowSnapshotPluginRepositories;
     }
     
+    private Log logger;
+
     @Override
     public void execute( EnforcerRuleHelper helper )
         throws EnforcerRuleException
     {
-        EnforcerRuleUtils utils = new EnforcerRuleUtils( helper );
+        logger = helper.getLog();
 
-        MavenProject project;
+        MavenSession session;
         try
         {
-            project = (MavenProject) helper.evaluate( "${project}" );
+            session = (MavenSession) helper.evaluate( "${session}" );
+
+            List<MavenProject> sortedProjects = session.getProjectDependencyGraph().getSortedProjects();
 
-            List<Model> models =
-                utils.getModelsRecursively( project.getGroupId(), project.getArtifactId(), project.getVersion(),
-                                            new File( project.getBasedir(), "pom.xml" ) );
+            List<Model> models = new ArrayList<Model>();
+            for ( MavenProject mavenProject : sortedProjects )
+            {
+                logger.debug( "Scanning project: " + mavenProject.getGroupId() + ":" + mavenProject.getArtifactId()
+                    + " version:" + mavenProject.getVersion() );
+                models.add( mavenProject.getOriginalModel() );
+            }
+            
             List<Model> badModels = new ArrayList<Model>();
 
             StringBuffer newMsg = new StringBuffer();
@@ -190,22 +195,6 @@ public class RequireNoRepositories
         {
             throw new EnforcerRuleException( e.getLocalizedMessage() );
         }
-        catch ( ArtifactResolutionException e )
-        {
-            throw new EnforcerRuleException( e.getLocalizedMessage() );
-        }
-        catch ( ArtifactNotFoundException e )
-        {
-            throw new EnforcerRuleException( e.getLocalizedMessage() );
-        }
-        catch ( IOException e )
-        {
-            throw new EnforcerRuleException( e.getLocalizedMessage() );
-        }
-        catch ( XmlPullParserException e )
-        {
-            throw new EnforcerRuleException( e.getLocalizedMessage() );
-        }
     }
 
     /**
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireNoRepositories.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireNoRepositories.java
index 9b6ac8b..c8b4cb7 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireNoRepositories.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireNoRepositories.java
@@ -1,5 +1,10 @@
 package org.apache.maven.plugins.enforcer;
 
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -20,236 +25,321 @@ package org.apache.maven.plugins.enforcer;
  */
 
 import java.util.Collections;
+import java.util.List;
 
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
-import org.codehaus.plexus.PlexusTestCase;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.ProjectDependencyGraph;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.RepositoryPolicy;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Test the "require no repositories" rule.
  * 
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author <a href="mailto:khmarbaise@apache.org">Karl Heinz Marbaise</a>
  */
 public class TestRequireNoRepositories
-    extends PlexusTestCase
 {
     private EnforcerRuleHelper helper;
 
     private RequireNoRepositories rule;
 
-    private MockProject project;
+    private MavenSession session;
 
-    public void setUp()
-        throws Exception
+    @Before
+    public void before()
+        throws ExpressionEvaluationException
     {
-        super.setUp();
+        session = mock( MavenSession.class );
+        helper = mock( EnforcerRuleHelper.class );
+
+        when( helper.evaluate( "${session}" ) ).thenReturn( session );
+
+        Log log = mock( Log.class );
+        when( helper.getLog() ).thenReturn( log );
 
         rule = new RequireNoRepositories();
         rule.setMessage( "my message" );
+    }
 
-        project = new MockProject();
-        project.setGroupId( "org.apache.maven.plugins.enforcer.test" );
-        project.setVersion( "1.0-SNAPSHOT" );
+    private MavenProject createMavenProject()
+    {
+        MavenProject mp = mock( MavenProject.class );
+        when( mp.getGroupId() ).thenReturn( "org.apache.maven.plugins.enforcer.test" );
+        when( mp.getArtifactId() ).thenReturn( "no-repositories-child" );
+        when( mp.getVersion() ).thenReturn( "1.0-SNAPSHOT" );
 
-        helper = EnforcerTestUtils.getHelper( project );
+        return mp;
     }
 
-    public void testAllBannedNoRepositories()
-        throws EnforcerRuleException
+    private Model createOriginalModel()
     {
-        project.setArtifactId( "no-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/no-repositories/child" ) );
+        Model m = mock( Model.class );
+        when( m.getGroupId() ).thenReturn( "org.apache.maven.plugins.enforcer.test" );
+        when( m.getArtifactId() ).thenReturn( "no-repositories" );
+        when( m.getVersion() ).thenReturn( "1.0-SNAPSHOT" );
+        return m;
+    }
 
-        rule.execute( helper );
+    private MavenProject createStandAloneProject()
+    {
+        MavenProject mp = createMavenProject();
+        Model originalModel = createOriginalModel();
+        // This means the interpolated model is the same
+        // as the non interpolated.
+        when( mp.getModel() ).thenReturn( originalModel );
+        when( mp.getOriginalModel() ).thenReturn( originalModel );
+        return mp;
     }
 
-    public void testAllBannedWithRepositories()
-        throws EnforcerRuleException
+    private void setupSortedProjects( List<MavenProject> projectList )
     {
-        project.setArtifactId( "with-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/with-repositories/child" ) );
+        ProjectDependencyGraph pdg = mock( ProjectDependencyGraph.class );
+        when( session.getProjectDependencyGraph() ).thenReturn( pdg );
+        when( pdg.getSortedProjects() ).thenReturn( projectList );
+    }
 
-        try
-        {
-            rule.execute( helper );
-            fail( "Should have exception" );
-        }
-        catch ( EnforcerRuleException e )
-        {
-            assertTrue( true );
-        }
+    private Repository createRepository( String id, String url )
+    {
+        Repository r = new Repository();
+        r.setId( id );
+        r.setUrl( url );
+        RepositoryPolicy snapshotPolicy = new RepositoryPolicy();
+        snapshotPolicy.setEnabled( false );
+        snapshotPolicy.setUpdatePolicy( "daily" );
+        r.setSnapshots( snapshotPolicy );
+
+        RepositoryPolicy releasePolicy = new RepositoryPolicy();
+        releasePolicy.setEnabled( true );
+        releasePolicy.setUpdatePolicy( "never" );
+        r.setReleases( releasePolicy );
+        
+        return r;
     }
 
-    public void testAllBannedWithAllowedRepositories()
-        throws EnforcerRuleException
+    private Repository createSnapshotRepository( String id, String url )
     {
-        rule.setAllowedRepositories( Collections.singletonList( "repo" ) );
+        Repository r = new Repository();
+        r.setId( id );
+        r.setUrl( url );
 
-        project.setArtifactId( "with-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/with-repositories/child" ) );
+        RepositoryPolicy snapshotPolicy = new RepositoryPolicy();
+        snapshotPolicy.setEnabled( true );
+        snapshotPolicy.setUpdatePolicy( "daily" );
+        r.setSnapshots( snapshotPolicy );
 
-        rule.execute( helper );
+        RepositoryPolicy releasePolicy = new RepositoryPolicy();
+        releasePolicy.setEnabled( false );
+        r.setReleases( releasePolicy );
+
+        return r;
     }
 
-    public void testAllBannedWithAllowedPluginRepositories()
+    private MavenProject addRepository( MavenProject project, Repository r )
+    {
+        Model originalModel = project.getOriginalModel();
+        List<Repository> repositories = new ArrayList<Repository>();
+        repositories.add( r );
+        when( originalModel.getRepositories() ).thenReturn( repositories );
+        return project;
+    }
+
+    private MavenProject addPluginRepository( MavenProject project, Repository r )
+    {
+        Model originalModel = project.getOriginalModel();
+        List<Repository> repositories = new ArrayList<Repository>();
+        repositories.add( r );
+        when( originalModel.getPluginRepositories() ).thenReturn( repositories );
+        return project;
+    }
+
+    /**
+     * This model contains a single module maven project without any repository.
+     */
+    @Test
+    public void testAllBannedNoRepositories()
         throws EnforcerRuleException
     {
-        rule.setAllowedPluginRepositories( Collections.singletonList( "repo" ) );
+        MavenProject baseProject = createStandAloneProject();
+        setupSortedProjects( Collections.singletonList( baseProject ) );
+
+        rule.execute( helper );
+    }
 
-        project.setArtifactId( "with-plugin-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/with-plugin-repositories/child" ) );
+    /**
+     * The model contains a single repository which is is not allowed by the default rules.
+     */
+    @Test( expected = EnforcerRuleException.class )
+    public void testAllBannedWithRepository()
+        throws EnforcerRuleException
+    {
+        MavenProject baseProject = createStandAloneProject();
+        addRepository( baseProject, createRepository( "repo", "http://example.com/repo" ) );
+        setupSortedProjects( Collections.singletonList( baseProject ) );
 
         rule.execute( helper );
     }
 
-    public void testReposNotBannedNoRepositories()
+    /**
+     * The model contains a single repository which is allowed by setting allowedRepositories to the id.
+     */
+    @Test
+    public void testAllBannedWithAllowedRepositories()
         throws EnforcerRuleException
     {
-        rule.setBanRepositories( false );
+        final String repositoryId = "repo";
+        rule.setAllowedRepositories( Collections.singletonList( repositoryId ) );
 
-        project.setArtifactId( "no-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/no-repositories/child" ) );
+        MavenProject baseProject = createStandAloneProject();
+        addRepository( baseProject, createRepository( repositoryId, "http://example.com/repo" ) );
+        setupSortedProjects( Collections.singletonList( baseProject ) );
 
         rule.execute( helper );
     }
 
-    public void testReposNotBannedWithRepositories()
+    /**
+     * The model contains a single repository. Turned off ban repositories.
+     */
+    @Test
+    public void testRepositoriesNotBannedWithSingleRepository()
         throws EnforcerRuleException
     {
+        final String repositoryId = "repo";
+
         rule.setBanRepositories( false );
 
-        project.setArtifactId( "with-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/with-repositories/child" ) );
+        MavenProject baseProject = createStandAloneProject();
+        addRepository( baseProject, createRepository( repositoryId, "http://example.com/repo" ) );
+        setupSortedProjects( Collections.singletonList( baseProject ) );
 
         rule.execute( helper );
     }
 
-    public void testReposNotBannedWithPluginRepositories()
+    /**
+     * The model contains no repository at all. Turned off ban repositories.
+     */
+    @Test
+    public void testRepositoriesNotBannedWithOutAnyRepository()
         throws EnforcerRuleException
     {
         rule.setBanRepositories( false );
 
-        project.setArtifactId( "with-plugin-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/with-plugin-repositories/child" ) );
+        MavenProject baseProject = createStandAloneProject();
+        setupSortedProjects( Collections.singletonList( baseProject ) );
 
-        try
-        {
-            rule.execute( helper );
-            fail( "Should have exception" );
-        }
-        catch ( EnforcerRuleException e )
-        {
-            assertTrue( true );
-        }
+        rule.execute( helper );
     }
 
-    public void testPluginReposNotBannedNoRepositories()
+    /**
+     * This model contains a single plugin repository. The given plugin repository is added to the list of allowed
+     * plugin repositories.
+     */
+    @Test
+    public void testAllBannedWithAllowedPluginRepositories()
         throws EnforcerRuleException
     {
-        rule.setBanPluginRepositories( false );
+        final String repositoryId = "repo";
+        rule.setAllowedPluginRepositories( Collections.singletonList( repositoryId ) );
 
-        project.setArtifactId( "no-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/no-repositories/child" ) );
+        MavenProject baseProject = createStandAloneProject();
+        addPluginRepository( baseProject, createRepository( repositoryId, "http://example.com/repo" ) );
+        setupSortedProjects( Collections.singletonList( baseProject ) );
 
         rule.execute( helper );
     }
 
-    public void testPluginReposNotBannedWithRepositories()
+    /**
+     * The model contains a single plugin repository. Turned off ban plugin repositories.
+     */
+    @Test
+    public void testPluginRepositoriesNotBannedWithSinglePluginRepository()
         throws EnforcerRuleException
     {
+        final String repositoryId = "repo";
+
         rule.setBanPluginRepositories( false );
 
-        project.setArtifactId( "with-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/with-repositories/child" ) );
+        MavenProject baseProject = createStandAloneProject();
+        addPluginRepository( baseProject, createRepository( repositoryId, "http://example.com/repo" ) );
+        setupSortedProjects( Collections.singletonList( baseProject ) );
 
-        try
-        {
-            rule.execute( helper );
-            fail( "Should have exception" );
-        }
-        catch ( EnforcerRuleException e )
-        {
-            assertTrue( true );
-        }
+        rule.execute( helper );
     }
 
-    public void testPluginReposNotBannedWithPluginRepositories()
+    /**
+     * The model contains no repository at all. Turned off ban plugin repositories.
+     */
+    @Test
+    public void testPluginRepositoriesNotBannedWithOutAnyRepository()
         throws EnforcerRuleException
     {
         rule.setBanPluginRepositories( false );
 
-        project.setArtifactId( "with-plugin-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/with-plugin-repositories/child" ) );
+        MavenProject baseProject = createStandAloneProject();
+        setupSortedProjects( Collections.singletonList( baseProject ) );
 
         rule.execute( helper );
     }
 
-    public void testReposNotAllowedWithSnapshotRepositories()
+    @Test( expected = EnforcerRuleException.class )
+    public void testAllBannedWithSnapshotRepository()
         throws EnforcerRuleException
     {
-        rule.setAllowSnapshotRepositories( true );
+        MavenProject baseProject = createStandAloneProject();
+        addRepository( baseProject, createSnapshotRepository( "repo", "http://example.com/repo" ) );
+        setupSortedProjects( Collections.singletonList( baseProject ) );
 
-        project.setArtifactId( "snapshot-plugin-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/snapshot-plugin-repositories/child" ) );
-
-        try
-        {
-            rule.execute( helper );
-            fail( "Should have exception" );
-        }
-        catch ( EnforcerRuleException e )
-        {
-            assertTrue( true );
-        }
+        rule.execute( helper );
     }
 
-    public void testReposAllowedWithSnapshotRepositories()
+    @Test
+    public void testAllBannedWithSnapshotRepositoryAllowedRepositories()
         throws EnforcerRuleException
     {
-        rule.setAllowSnapshotRepositories( true );
+        final String repositoryId = "repo";
+        rule.setAllowedRepositories( Collections.singletonList( repositoryId ) );
 
-        project.setArtifactId( "snapshot-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/snapshot-repositories/child" ) );
+        MavenProject baseProject = createStandAloneProject();
+        addRepository( baseProject, createSnapshotRepository( repositoryId, "http://example.com/repo" ) );
+        setupSortedProjects( Collections.singletonList( baseProject ) );
 
         rule.execute( helper );
     }
 
-    public void testPluginReposNotAllowedWithSnapshotRepositories()
+    @Test
+    public void testAllBannedWithSnapshotRepositoryAndSetAllowSnapshotRepositories()
         throws EnforcerRuleException
     {
-        rule.setAllowSnapshotPluginRepositories( true );
+        final String repositoryId = "repo";
+        rule.setAllowSnapshotRepositories( true );
 
-        project.setArtifactId( "snapshot-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/snapshot-repositories/child" ) );
+        MavenProject baseProject = createStandAloneProject();
+        addRepository( baseProject, createSnapshotRepository( repositoryId, "http://example.com/repo" ) );
+        setupSortedProjects( Collections.singletonList( baseProject ) );
 
-        try
-        {
-            rule.execute( helper );
-            fail( "Should have exception" );
-        }
-        catch ( EnforcerRuleException e )
-        {
-            assertTrue( true );
-        }
+        rule.execute( helper );
     }
 
-    public void testPluginReposAllowedWithSnapshotPluginRepositories()
+    @Test
+    public void testAllBannedWithSnapshotPluginRepositoryAndSetAllowSnapshotPluginRepositories()
         throws EnforcerRuleException
     {
+        final String repositoryId = "repo";
         rule.setAllowSnapshotPluginRepositories( true );
 
-        project.setArtifactId( "snapshot-plugin-repositories-child" );
-        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/snapshot-plugin-repositories/child" ) );
+        MavenProject baseProject = createStandAloneProject();
+        addPluginRepository( baseProject, createSnapshotRepository( repositoryId, "http://example.com/repo" ) );
+        setupSortedProjects( Collections.singletonList( baseProject ) );
 
         rule.execute( helper );
     }
 
-    /**
-     * Test id.
-     */
-    public void testId()
-    {
-        RequireNoRepositories rule = new RequireNoRepositories();
-        rule.getCacheId();
-    }
 }
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-plugin-repo/invoker.properties b/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-plugin-repo/invoker.properties
new file mode 100644
index 0000000..c98ac4c
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-plugin-repo/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.buildResult=failure
\ No newline at end of file
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-plugin-repo/pom.xml b/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-plugin-repo/pom.xml
new file mode 100644
index 0000000..ba8a6a7
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-plugin-repo/pom.xml
@@ -0,0 +1,70 @@
+<?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.enforcer</groupId>
+  <artifactId>test</artifactId>
+  <version>1.0</version>
+
+  <description>This IT makes sure to prevent having pluginRepositories inside the pom.</description>
+
+  <pluginRepositories>
+    <pluginRepository>
+      <id>plugin-repo</id>
+      <url>http://example.com/repo</url>
+    </pluginRepository>
+  </pluginRepositories>
+  <repositories>
+    <repository>
+      <id>com.asual.maven.public</id>
+      <name>Asual Public Repository</name>
+      <url>http://localhost</url>
+    </repository>
+  </repositories>
+
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>@project.version@</version>
+        <executions>
+          <execution>
+            <id>test</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireNoRepositories>
+                  <allowedPluginRepositories>plugin-repo</allowedPluginRepositories>
+                </requireNoRepositories>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-plugin-repo/verify.groovy b/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-plugin-repo/verify.groovy
new file mode 100644
index 0000000..c065765
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-plugin-repo/verify.groovy
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+File buildLog = new File( basedir, 'build.log' )
+assert buildLog.text.contains( '[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireNoRepositories failed with message:' )
+assert buildLog.text.contains( 'Some poms have repositories defined:' )
+assert buildLog.text.contains( 'org.apache.maven.its.enforcer:test version:1.0 has repositories [com.asual.maven.public]' )
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-repo/invoker.properties b/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-repo/invoker.properties
new file mode 100644
index 0000000..c98ac4c
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-repo/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.buildResult=failure
\ No newline at end of file
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-repo/pom.xml b/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-repo/pom.xml
new file mode 100644
index 0000000..c0af0cc
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-repo/pom.xml
@@ -0,0 +1,70 @@
+<?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.enforcer</groupId>
+  <artifactId>test</artifactId>
+  <version>1.0</version>
+
+  <description>This IT makes sure to prevent having pluginRepositories inside the pom.</description>
+
+  <pluginRepositories>
+    <pluginRepository>
+      <id>plugin-repo</id>
+      <url>http://example.com/repo</url>
+    </pluginRepository>
+  </pluginRepositories>
+  <repositories>
+    <repository>
+      <id>com.asual.maven.public</id>
+      <name>Asual Public Repository</name>
+      <url>http://localhost</url>
+    </repository>
+  </repositories>
+
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>@project.version@</version>
+        <executions>
+          <execution>
+            <id>test</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireNoRepositories>
+                  <allowedRepositories>com.asual.maven.public</allowedRepositories>
+                </requireNoRepositories>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-repo/verify.groovy b/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-repo/verify.groovy
new file mode 100644
index 0000000..b9538f3
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories-allow-repo/verify.groovy
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+File buildLog = new File( basedir, 'build.log' )
+assert buildLog.text.contains( '[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireNoRepositories failed with message:' )
+assert buildLog.text.contains( 'Some poms have repositories defined:' )
+assert buildLog.text.contains( 'org.apache.maven.its.enforcer:test version:1.0 has plugin repositories [plugin-repo]' )
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml b/maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml
index c66de18..bf5d7f9 100644
--- a/maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml
@@ -27,6 +27,7 @@ under the License.
   <version>1.0</version>
 
   <description>
+    This IT demonstrates having no repositories defined at all.
   </description>
 
   <build>
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_allowed-plugin-repo/invoker.properties b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_allowed-plugin-repo/invoker.properties
new file mode 100644
index 0000000..c98ac4c
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_allowed-plugin-repo/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.buildResult=failure
\ No newline at end of file
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_allowed-plugin-repo/pom.xml b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_allowed-plugin-repo/pom.xml
new file mode 100644
index 0000000..4951265
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_allowed-plugin-repo/pom.xml
@@ -0,0 +1,70 @@
+<?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.enforcer</groupId>
+  <artifactId>test</artifactId>
+  <version>1.0</version>
+
+  <description>This IT makes sure to prevent having defined pluginRepository and repository in allowedPluginRepositories</description>
+
+  <pluginRepositories>
+    <pluginRepository>
+      <id>plugin-repo</id>
+      <url>http://example.com/repo</url>
+    </pluginRepository>
+  </pluginRepositories>
+  <repositories>
+    <repository>
+      <id>com.asual.maven.public</id>
+      <name>Asual Public Repository</name>
+      <url>http://localhost</url>
+    </repository>
+  </repositories>
+
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>@project.version@</version>
+        <executions>
+          <execution>
+            <id>test</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireNoRepositories>
+                  <allowedPluginRepositories>plugin-repo,com.asual.maven.public</allowedPluginRepositories>
+                </requireNoRepositories>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_allowed-plugin-repo/verify.groovy b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_allowed-plugin-repo/verify.groovy
new file mode 100644
index 0000000..c065765
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_allowed-plugin-repo/verify.groovy
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+File buildLog = new File( basedir, 'build.log' )
+assert buildLog.text.contains( '[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireNoRepositories failed with message:' )
+assert buildLog.text.contains( 'Some poms have repositories defined:' )
+assert buildLog.text.contains( 'org.apache.maven.its.enforcer:test version:1.0 has repositories [com.asual.maven.public]' )
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_plugin-repositories/invoker.properties b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_plugin-repositories/invoker.properties
new file mode 100644
index 0000000..c98ac4c
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_plugin-repositories/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.buildResult=failure
\ No newline at end of file
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_plugin-repositories/pom.xml
similarity index 88%
copy from maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml
copy to maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_plugin-repositories/pom.xml
index c66de18..0ceb88b 100644
--- a/maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_plugin-repositories/pom.xml
@@ -1,55 +1,59 @@
-<?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.enforcer</groupId>
-  <artifactId>test</artifactId>
-  <version>1.0</version>
-
-  <description>
-  </description>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <version>@project.version@</version>
-        <executions>
-          <execution>
-            <id>test</id>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <requireNoRepositories>
-                </requireNoRepositories>
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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.enforcer</groupId>
+  <artifactId>test</artifactId>
+  <version>1.0</version>
+
+  <pluginRepositories>
+    <pluginRepository>
+      <id>repo</id>
+      <url>http://example.com/repo</url>
+    </pluginRepository>
+  </pluginRepositories>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>@project.version@</version>
+        <executions>
+          <execution>
+            <id>test</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireNoRepositories>
+                </requireNoRepositories>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_plugin-repositories/verify.groovy b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_plugin-repositories/verify.groovy
new file mode 100644
index 0000000..b3c2b46
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_plugin-repositories/verify.groovy
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+File buildLog = new File( basedir, 'build.log' )
+assert buildLog.text.contains( '[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireNoRepositories failed with message:' )
+assert buildLog.text.contains( 'Some poms have repositories defined:' )
+assert buildLog.text.contains( 'org.apache.maven.its.enforcer:test version:1.0 has plugin repositories [repo]' )
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_repositories/invoker.properties b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_repositories/invoker.properties
new file mode 100644
index 0000000..c98ac4c
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_repositories/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.buildResult=failure
\ No newline at end of file
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_repositories/pom.xml b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_repositories/pom.xml
new file mode 100644
index 0000000..ba8a6a7
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_repositories/pom.xml
@@ -0,0 +1,70 @@
+<?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.enforcer</groupId>
+  <artifactId>test</artifactId>
+  <version>1.0</version>
+
+  <description>This IT makes sure to prevent having pluginRepositories inside the pom.</description>
+
+  <pluginRepositories>
+    <pluginRepository>
+      <id>plugin-repo</id>
+      <url>http://example.com/repo</url>
+    </pluginRepository>
+  </pluginRepositories>
+  <repositories>
+    <repository>
+      <id>com.asual.maven.public</id>
+      <name>Asual Public Repository</name>
+      <url>http://localhost</url>
+    </repository>
+  </repositories>
+
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>@project.version@</version>
+        <executions>
+          <execution>
+            <id>test</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireNoRepositories>
+                  <allowedPluginRepositories>plugin-repo</allowedPluginRepositories>
+                </requireNoRepositories>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_repositories/verify.groovy b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_repositories/verify.groovy
new file mode 100644
index 0000000..c065765
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories_failure_repositories/verify.groovy
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+File buildLog = new File( basedir, 'build.log' )
+assert buildLog.text.contains( '[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireNoRepositories failed with message:' )
+assert buildLog.text.contains( 'Some poms have repositories defined:' )
+assert buildLog.text.contains( 'org.apache.maven.its.enforcer:test version:1.0 has repositories [com.asual.maven.public]' )
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml b/maven-enforcer-plugin/src/it/projects/require-no-repositories_mm/child/pom.xml
similarity index 53%
copy from maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml
copy to maven-enforcer-plugin/src/it/projects/require-no-repositories_mm/child/pom.xml
index c66de18..b9c3410 100644
--- a/maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories_mm/child/pom.xml
@@ -22,34 +22,12 @@ under the License.
 <project>
   <modelVersion>4.0.0</modelVersion>
 
-  <groupId>org.apache.maven.its.enforcer</groupId>
-  <artifactId>test</artifactId>
-  <version>1.0</version>
+  <parent>
+    <groupId>org.apache.maven.its.enforcer</groupId>
+    <artifactId>test</artifactId>
+    <version>1.0</version>
+  </parent>
 
-  <description>
-  </description>
+  <artifactId>child</artifactId>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <version>@project.version@</version>
-        <executions>
-          <execution>
-            <id>test</id>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <requireNoRepositories>
-                </requireNoRepositories>
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
 </project>
diff --git a/maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml b/maven-enforcer-plugin/src/it/projects/require-no-repositories_mm/pom.xml
similarity index 91%
copy from maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml
copy to maven-enforcer-plugin/src/it/projects/require-no-repositories_mm/pom.xml
index c66de18..e2651ac 100644
--- a/maven-enforcer-plugin/src/it/projects/require-no-repositories/pom.xml
+++ b/maven-enforcer-plugin/src/it/projects/require-no-repositories_mm/pom.xml
@@ -25,8 +25,13 @@ under the License.
   <groupId>org.apache.maven.its.enforcer</groupId>
   <artifactId>test</artifactId>
   <version>1.0</version>
+  <packaging>pom</packaging>
 
+  <modules>
+    <module>child</module>
+  </modules>
   <description>
+    This IT demonstrates having no repositories defined at all.
   </description>
 
   <build>

-- 
To stop receiving notification emails like this one, please contact
"commits@maven.apache.org" <co...@maven.apache.org>.