You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2007/08/30 05:27:52 UTC
svn commit: r571024 - in /maven/plugins/trunk/maven-enforcer-plugin: ./
src/main/java/org/apache/maven/plugin/enforcer/ src/site/apt/
src/site/apt/rules/ src/test/java/org/apache/maven/plugin/enforcer/
src/test/resources/ src/test/resources/requirePlug...
Author: brianf
Date: Wed Aug 29 20:27:51 2007
New Revision: 571024
URL: http://svn.apache.org/viewvc?rev=571024&view=rev
Log:
MENFORCER-15: added tests and docs
Added:
maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requirePluginVersions.apt
maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestRequirePluginVersions.java
maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/
maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/
maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/
maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/b/
maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/b/c/
maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/b/c/pom.xml
maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/b/pom.xml
maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/pom.xml
Modified:
maven/plugins/trunk/maven-enforcer-plugin/ (props changed)
maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/RequirePluginVersions.java
maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/bannedDependencies.apt
maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/evaluateBeanshell.apt
maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/index.apt
maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/noSnapshots.apt
maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireJavaVersion.apt
maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireMavenVersion.apt
maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireOS.apt
maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireProperty.apt
maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/usage.apt
maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/EnforcerTestUtils.java
maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/MockProject.java
Propchange: maven/plugins/trunk/maven-enforcer-plugin/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Wed Aug 29 20:27:51 2007
@@ -1,3 +1,5 @@
target
.classpath
.project
+.settings
+cobertura.ser
Modified: maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/RequirePluginVersions.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/RequirePluginVersions.java?rev=571024&r1=571023&r2=571024&view=diff
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/RequirePluginVersions.java (original)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/RequirePluginVersions.java Wed Aug 29 20:27:51 2007
@@ -122,7 +122,7 @@
List remoteRepositories;
Log log;
-
+
MavenSession session;
public void execute ( EnforcerRuleHelper helper )
@@ -144,8 +144,7 @@
resolver = (ArtifactResolver) helper.getComponent( ArtifactResolver.class );
local = (ArtifactRepository) helper.evaluate( "${localRepository}" );
remoteRepositories = project.getRemoteArtifactRepositories();
-
-
+
// I couldn't find a direct way to get at the
// lifecycles list.
lifecycles = (List) ReflectionUtils.getValueIncludingSuperclasses( "lifecycles", life );
@@ -158,7 +157,7 @@
log.debug( "All Plugins: " + allPlugins );
List plugins = getAllPluginEntries( project );
-
+
// now look for the versions that aren't valid
// and add to a list.
ArrayList failures = new ArrayList();
@@ -166,7 +165,7 @@
while ( iter.hasNext() )
{
Plugin plugin = (Plugin) iter.next();
- if ( !hasVersionSpecified( plugin, plugins ))
+ if ( !hasVersionSpecified( plugin, plugins ) )
{
failures.add( plugin );
}
@@ -184,7 +183,7 @@
Plugin plugin = (Plugin) iter.next();
newMsg.append( plugin.getGroupId() + ":" + plugin.getArtifactId() + "\n" );
}
- if (StringUtils.isNotEmpty( message ))
+ if ( StringUtils.isNotEmpty( message ) )
{
newMsg.append( message );
}
@@ -218,19 +217,19 @@
}
catch ( ArtifactResolutionException e )
{
- throw new EnforcerRuleException( e.getLocalizedMessage());
+ throw new EnforcerRuleException( e.getLocalizedMessage() );
}
catch ( ArtifactNotFoundException e )
{
- throw new EnforcerRuleException( e.getLocalizedMessage());
+ throw new EnforcerRuleException( e.getLocalizedMessage() );
}
catch ( IOException e )
{
- throw new EnforcerRuleException( e.getLocalizedMessage());
+ throw new EnforcerRuleException( e.getLocalizedMessage() );
}
catch ( XmlPullParserException e )
{
- throw new EnforcerRuleException( e.getLocalizedMessage());
+ throw new EnforcerRuleException( e.getLocalizedMessage() );
}
}
@@ -240,8 +239,9 @@
* plugin. Can optionally ban "RELEASE" or "LATEST" even
* if specified.
*/
- public boolean hasVersionSpecified ( Plugin source, List plugins )
+ protected boolean hasVersionSpecified ( Plugin source, List plugins )
{
+ boolean status = false;
Iterator iter = plugins.iterator();
while ( iter.hasNext() )
{
@@ -265,11 +265,18 @@
}
// the version was specified and not
// banned. It's ok.
- return true;
+
+ status = true;
+
+ if (!banRelease && !banLatest)
+ {
+ //no need to keep looking
+ break;
+ }
}
}
}
- return false;
+ return status;
}
/*
@@ -556,7 +563,9 @@
}
/**
- * This method gets the model for the defined artifact. Looks first in the filesystem, then tries to get it from the repo.
+ * This method gets the model for the defined artifact.
+ * Looks first in the filesystem, then tries to get it
+ * from the repo.
*
* @param groupId
* @param artifactId
@@ -564,45 +573,50 @@
* @return
* @throws ArtifactResolutionException
* @throws ArtifactNotFoundException
- * @throws XmlPullParserException
- * @throws IOException
+ * @throws XmlPullParserException
+ * @throws IOException
*/
private Model getPomModel ( String groupId, String artifactId, String version, File pom )
throws ArtifactResolutionException, ArtifactNotFoundException, IOException, XmlPullParserException
{
- Model model= null;
-
- //do we want to look in the reactor like the project builder? Would require @aggregator goal
- //which causes problems in maven core right now because we also need dependency resolution in other
- //rules. (MNG-2277)
-
- //look in the location specified by pom first.
+ Model model = null;
+
+ // do we want to look in the reactor like the
+ // project builder? Would require @aggregator goal
+ // which causes problems in maven core right now
+ // because we also need dependency resolution in
+ // other
+ // rules. (MNG-2277)
+
+ // look in the location specified by pom first.
boolean found = false;
try
{
- model = readModel(pom);
-
- //i found a model, lets make sure it's the one I want
+ model = readModel( pom );
+
+ // i found a model, lets make sure it's the one
+ // I want
found = checkIfModelMatches( groupId, artifactId, version, model );
}
catch ( IOException e )
{
- //nothing here, but lets look in the repo before giving up.
+ // nothing here, but lets look in the repo
+ // before giving up.
}
catch ( XmlPullParserException e )
{
- //nothing here, but lets look in the repo before giving up.
+ // nothing here, but lets look in the repo
+ // before giving up.
}
-
- //i didn't find it in the local file system, go look in the repo
- if (!found)
+
+ // i didn't find it in the local file system, go
+ // look in the repo
+ if ( !found )
{
Artifact pomArtifact = factory.createArtifact( groupId, artifactId, version, null, "pom" );
resolver.resolve( pomArtifact, remoteRepositories, local );
model = readModel( pomArtifact.getFile() );
}
-
-
return model;
}
@@ -620,7 +634,7 @@
* @throws IOException
* @throws XmlPullParserException
*/
- private List getModelsRecursively ( String groupId, String artifactId, String version, File pom )
+ protected List getModelsRecursively ( String groupId, String artifactId, String version, File pom )
throws ArtifactResolutionException, ArtifactNotFoundException, IOException, XmlPullParserException
{
List models = null;
@@ -628,18 +642,18 @@
Parent parent = model.getParent();
- //recurse into the parent
+ // recurse into the parent
if ( parent != null )
{
- //get the relative path
+ // get the relative path
String relativePath = parent.getRelativePath();
- if (StringUtils.isEmpty( relativePath ))
+ if ( StringUtils.isEmpty( relativePath ) )
{
relativePath = "../pom.xml";
}
- //calculate the recursive path
- File parentPom = new File(pom.getParent(),relativePath);
-
+ // calculate the recursive path
+ File parentPom = new File( pom.getParent(), relativePath );
+
models = getModelsRecursively( parent.getGroupId(), parent.getArtifactId(), parent.getVersion(), parentPom );
}
else
@@ -664,12 +678,13 @@
* @throws IOException
* @throws XmlPullParserException
*/
- private List getAllPluginEntries ( MavenProject project )
+ protected List getAllPluginEntries ( MavenProject project )
throws ArtifactResolutionException, ArtifactNotFoundException, IOException, XmlPullParserException
{
List plugins = new ArrayList();
// get all the pom models
- List models = getModelsRecursively( project.getGroupId(), project.getArtifactId(), project.getVersion(),new File(project.getBasedir(),"pom.xml"));
+ List models = getModelsRecursively( project.getGroupId(), project.getArtifactId(), project.getVersion(),
+ new File( project.getBasedir(), "pom.xml" ) );
// now find all the plugin entries, either in
// build.plugins or build.pluginManagement.plugins
@@ -698,32 +713,82 @@
return plugins;
}
-
- private boolean checkIfModelMatches(String groupId, String artifactId, String version, Model model)
+
+ protected boolean checkIfModelMatches ( String groupId, String artifactId, String version, Model model )
{
- //try these first.
+ // try these first.
String modelGroup = model.getGroupId();
String modelVersion = model.getVersion();
-
+
try
{
- if (StringUtils.isEmpty( modelGroup ))
- {
- modelGroup = model.getParent().getGroupId();
- }
-
- if (StringUtils.isEmpty( modelVersion ))
- {
- modelVersion = model.getParent().getVersion();
- }
+ if ( StringUtils.isEmpty( modelGroup ) )
+ {
+ modelGroup = model.getParent().getGroupId();
+ }
+
+ if ( StringUtils.isEmpty( modelVersion ) )
+ {
+ modelVersion = model.getParent().getVersion();
+ }
}
- catch (NullPointerException e)
+ catch ( NullPointerException e )
{
- //this is probably bad. I don't have a valid group or version and I can't find a parent????
- //lets see if it's what we're looking for anyway.
+ // this is probably bad. I don't have a valid
+ // group or version and I can't find a
+ // parent????
+ // lets see if it's what we're looking for
+ // anyway.
}
- return (groupId.equals( modelGroup ) &&
- artifactId.equals( model.getArtifactId() ) &&
- version.equals( modelVersion ));
+ return ( StringUtils.equals( groupId, modelGroup ) && StringUtils.equals( version, modelVersion ) && StringUtils
+ .equals( artifactId, model.getArtifactId() ) );
+ }
+
+ /**
+ * @return the banLatest
+ */
+ protected boolean isBanLatest ()
+ {
+ return this.banLatest;
+ }
+
+ /**
+ * @param theBanLatest the banLatest to set
+ */
+ protected void setBanLatest ( boolean theBanLatest )
+ {
+ this.banLatest = theBanLatest;
+ }
+
+ /**
+ * @return the banRelease
+ */
+ protected boolean isBanRelease ()
+ {
+ return this.banRelease;
+ }
+
+ /**
+ * @param theBanRelease the banRelease to set
+ */
+ protected void setBanRelease ( boolean theBanRelease )
+ {
+ this.banRelease = theBanRelease;
+ }
+
+ /**
+ * @return the message
+ */
+ protected String getMessage ()
+ {
+ return this.message;
+ }
+
+ /**
+ * @param theMessage the message to set
+ */
+ protected void setMessage ( String theMessage )
+ {
+ this.message = theMessage;
}
}
Modified: maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/bannedDependencies.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/bannedDependencies.apt?rev=571024&r1=571023&r2=571024&view=diff
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/bannedDependencies.apt (original)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/bannedDependencies.apt Wed Aug 29 20:27:51 2007
@@ -63,7 +63,7 @@
<execution>
<id>enforce-banned-dependencies</id>
<goals>
- <goal>enforce-once</goal>
+ <goal>enforce</goal>
</goals>
<configuration>
<rules>
Modified: maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/evaluateBeanshell.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/evaluateBeanshell.apt?rev=571024&r1=571023&r2=571024&view=diff
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/evaluateBeanshell.apt (original)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/evaluateBeanshell.apt Wed Aug 29 20:27:51 2007
@@ -51,7 +51,7 @@
<execution>
<id>enforce-beanshell</id>
<goals>
- <goal>enforce-once</goal>
+ <goal>enforce</goal>
</goals>
<configuration>
<rules>
Modified: maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/index.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/index.apt?rev=571024&r1=571023&r2=571024&view=diff
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/index.apt (original)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/index.apt Wed Aug 29 20:27:51 2007
@@ -40,6 +40,8 @@
* {{{requireOS.html}requireOS}} - enforces the OS / CPU Archictecture.
+ * {{{requirePluginVersions.html}requirePluginVersions}} - enforces that all plugins have a specified version.
+
* {{{requireProperty.html}requireProperty}} - enforces the existence and values of properties.
[]
Modified: maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/noSnapshots.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/noSnapshots.apt?rev=571024&r1=571023&r2=571024&view=diff
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/noSnapshots.apt (original)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/noSnapshots.apt Wed Aug 29 20:27:51 2007
@@ -51,7 +51,7 @@
<execution>
<id>enforce-no-snapshots</id>
<goals>
- <goal>enforce-once</goal>
+ <goal>enforce</goal>
</goals>
<configuration>
<rules>
Modified: maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireJavaVersion.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireJavaVersion.apt?rev=571024&r1=571023&r2=571024&view=diff
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireJavaVersion.apt (original)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireJavaVersion.apt Wed Aug 29 20:27:51 2007
@@ -73,7 +73,7 @@
<execution>
<id>enforce-java</id>
<goals>
- <goal>enforce-once</goal>
+ <goal>enforce</goal>
</goals>
<configuration>
<rules>
Modified: maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireMavenVersion.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireMavenVersion.apt?rev=571024&r1=571023&r2=571024&view=diff
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireMavenVersion.apt (original)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireMavenVersion.apt Wed Aug 29 20:27:51 2007
@@ -49,7 +49,7 @@
<execution>
<id>enforce-java</id>
<goals>
- <goal>enforce-once</goal>
+ <goal>enforce</goal>
</goals>
<configuration>
<rules>
Modified: maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireOS.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireOS.apt?rev=571024&r1=571023&r2=571024&view=diff
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireOS.apt (original)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireOS.apt Wed Aug 29 20:27:51 2007
@@ -118,7 +118,7 @@
<execution>
<id>enforce-os</id>
<goals>
- <goal>enforce-once</goal>
+ <goal>enforce</goal>
</goals>
<configuration>
<rules>
Added: maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requirePluginVersions.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requirePluginVersions.apt?rev=571024&view=auto
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requirePluginVersions.apt (added)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requirePluginVersions.apt Wed Aug 29 20:27:51 2007
@@ -0,0 +1,72 @@
+~~ 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.
+
+ ------
+ Require Plugin Versions
+ ------
+ Brian Fox
+ ------
+ August 2007
+ ------
+
+Require Plugin Versions
+
+ This rule enforces that all plugins have a version defined, either in the plugin or pluginManagement section of the pom or a parent pom.
+
+ The following parameters are supported by this rule:
+
+ * message - an optional message to the user if the rule fails.
+
+ * banLatest - disallow any use of "LATEST" as a version for any plugin. Default = true
+
+ * banRelease - disallow any use of "RELEASE" as a version for any plugin. Default = true
+
+ []
+
+ Sample Plugin Configuration:
+
++---+
+<project>
+ [...]
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>enforce-plugin-versions</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <configuration>
+ <rules>
+ <requirePluginVersions>
+ <message>Best Practice is to always define plugin versions!</message>
+ <banLatest>true</banLatest>
+ <banRelease>true</banRelease>
+ </requirePluginVersions>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ [...]
+</project>
++---+
\ No newline at end of file
Modified: maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireProperty.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireProperty.apt?rev=571024&r1=571023&r2=571024&view=diff
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireProperty.apt (original)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/rules/requireProperty.apt Wed Aug 29 20:27:51 2007
@@ -54,7 +54,7 @@
<execution>
<id>enforce-property</id>
<goals>
- <goal>enforce-once</goal>
+ <goal>enforce</goal>
</goals>
<configuration>
<rules>
Modified: maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/usage.apt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/usage.apt?rev=571024&r1=571023&r2=571024&view=diff
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/usage.apt (original)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/site/apt/usage.apt Wed Aug 29 20:27:51 2007
@@ -73,7 +73,7 @@
<execution>
<id>enforce-versions</id>
<goals>
- <goal>enforce-once</goal>
+ <goal>enforce</goal>
</goals>
<configuration>
<rules>
Modified: maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/EnforcerTestUtils.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/EnforcerTestUtils.java?rev=571024&r1=571023&r2=571024&view=diff
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/EnforcerTestUtils.java (original)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/EnforcerTestUtils.java Wed Aug 29 20:27:51 2007
@@ -23,6 +23,7 @@
import java.util.Properties;
import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.logging.SystemStreamLog;
import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.enforcer.rule.api.EnforcerRuleHelper;
@@ -53,5 +54,14 @@
ExpressionEvaluator eval = new EnforcerExpressionEvaluator( session, new MockPathTranslator(),
project );
return new DefaultEnforcementRuleHelper( session, eval, new SystemStreamLog() );
+ }
+
+ public static Plugin newPlugin(String groupId, String artifactId, String version)
+ {
+ Plugin plugin = new Plugin();
+ plugin.setArtifactId( artifactId );
+ plugin.setGroupId( groupId );
+ plugin.setVersion( version );
+ return plugin;
}
}
Modified: maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/MockProject.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/MockProject.java?rev=571024&r1=571023&r2=571024&view=diff
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/MockProject.java (original)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/MockProject.java Wed Aug 29 20:27:51 2007
@@ -155,6 +155,8 @@
private Set artifacts;
private Properties properties = new Properties();
+
+ private File baseDir = null;
public MockProject()
{
@@ -240,7 +242,16 @@
public File getBasedir()
{
- return new File( PlexusTestCase.getBasedir() );
+ if (baseDir == null)
+ {
+ baseDir = new File( PlexusTestCase.getBasedir() );
+ }
+ return baseDir;
+ }
+
+ public void setBaseDir(File base)
+ {
+ baseDir = base;
}
public void setDependencies( List list )
Added: maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestRequirePluginVersions.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestRequirePluginVersions.java?rev=571024&view=auto
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestRequirePluginVersions.java (added)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestRequirePluginVersions.java Wed Aug 29 20:27:51 2007
@@ -0,0 +1,212 @@
+package org.apache.maven.plugin.enforcer;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ *
+ * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
+ *
+ */
+public class TestRequirePluginVersions
+ extends AbstractMojoTestCase
+{
+ public void testCheckIfModelMatches ()
+ {
+
+ RequirePluginVersions rule = new RequirePluginVersions();
+
+ Model model = new Model();
+ model.setArtifactId( "" );
+ model.setGroupId( "" );
+ model.setVersion( "" );
+
+ // should generate internal NPE on the parent, but
+ // will still
+ // compare the raw values
+ assertTrue( rule.checkIfModelMatches( "", "", "", model ) );
+ assertFalse( rule.checkIfModelMatches( "", "", "1.0", model ) );
+
+ // now setup a parent
+ Parent parent = new Parent();
+ parent.setArtifactId( "foo" );
+ parent.setGroupId( "foo-group" );
+ parent.setVersion( "1.0" );
+ model.setParent( parent );
+
+ // should NOT pickup the parent artifact
+ assertFalse( rule.checkIfModelMatches( "foo-group", "foo", "1.0", model ) );
+
+ // check that the version and group are inherited
+ // from the parent.
+ assertTrue( rule.checkIfModelMatches( "foo-group", "", "1.0", model ) );
+
+ // check handling of nulls
+ assertFalse( rule.checkIfModelMatches( "foo-group", null, "1.0", model ) );
+ }
+
+ public void testHasVersionSpecified ()
+ {
+ Plugin source = new Plugin();
+ source.setArtifactId( "foo" );
+ source.setGroupId( "group" );
+
+ // setup the plugins. I'm setting up the foo group
+ // with a few bogus entries and then a real one.
+ // this is to test that the list is exhaustively
+ // searched for versions before giving up.
+ // banLatest/Release will fail if it is found
+ // anywhere in the list
+ List plugins = new ArrayList();
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "a-artifact", "1.0" ) );
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "foo", null ) );
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "foo", "" ) );
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "b-artifact", "1.0" ) );
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "foo", "1.0" ) );
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "c-artifact", "LATEST" ) );
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "c-artifact", "1.0" ) );
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "d-artifact", "RELEASE" ) );
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "d-artifact", "1.0" ) );
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "e-artifact", "1.0" ) );
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "e-artifact", "RELEASE" ) );
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "f-artifact", "1.0" ) );
+ plugins.add( EnforcerTestUtils.newPlugin( "group", "f-artifact", "LATEST" ) );
+
+ RequirePluginVersions rule = new RequirePluginVersions();
+ rule.setBanLatest( false );
+ rule.setBanRelease( false );
+
+ assertTrue( rule.hasVersionSpecified( source, plugins ) );
+
+ // check that LATEST is allowed
+ source.setArtifactId( "c-artifact" );
+ assertTrue( rule.hasVersionSpecified( source, plugins ) );
+
+ // check that LATEST is banned
+ rule.setBanLatest( true );
+ assertFalse( rule.hasVersionSpecified( source, plugins ) );
+
+ // check that LATEST is exhausively checked
+ source.setArtifactId( "f-artifact" );
+ assertFalse( rule.hasVersionSpecified( source, plugins ) );
+
+ // check that RELEASE is allowed
+ source.setArtifactId( "d-artifact" );
+ assertTrue( rule.hasVersionSpecified( source, plugins ) );
+
+ // check that RELEASE is banned
+ rule.setBanRelease( true );
+ assertFalse( rule.hasVersionSpecified( source, plugins ) );
+
+ // check that RELEASE is exhausively checked
+ source.setArtifactId( "e-artifact" );
+ assertFalse( rule.hasVersionSpecified( source, plugins ) );
+ }
+
+ public void testGetModelsRecursivelyBottom ()
+ throws ArtifactResolutionException, ArtifactNotFoundException, IOException, XmlPullParserException
+ {
+ RequirePluginVersions rule = new RequirePluginVersions();
+ String path = "target/test-classes/requirePluginVersions/getPomRecursively/b/c";
+
+ StringUtils.replace( path, "/", File.separator );
+
+ File pom = new File( getBasedir() + File.separator + path, "pom.xml" );
+
+ List models = rule.getModelsRecursively( "group", "c", "1.0", pom );
+
+ // there should be 3
+ assertEquals( 3, models.size() );
+
+ // now make sure they are all there
+ Model m = new Model();
+ m.setGroupId( "group" );
+ m.setVersion( "1.0" );
+ m.setArtifactId( "c" );
+
+ models.contains( m );
+
+ m.setArtifactId( "b" );
+ models.contains( m );
+
+ m.setArtifactId( "a" );
+ models.contains( m );
+ }
+
+ public void testGetModelsRecursivelyTop ()
+ throws ArtifactResolutionException, ArtifactNotFoundException, IOException, XmlPullParserException
+ {
+ RequirePluginVersions rule = new RequirePluginVersions();
+ String path = "target/test-classes/requirePluginVersions/getPomRecursively";
+
+ StringUtils.replace( path, "/", File.separator );
+
+ File pom = new File( getBasedir() + File.separator + path, "pom.xml" );
+
+ List models = rule.getModelsRecursively( "group", "a", "1.0", pom );
+
+ // there should be 1
+ assertEquals( 1, models.size() );
+
+ // now make sure they are all there
+ Model m = new Model();
+ m.setGroupId( "group" );
+ m.setVersion( "1.0" );
+ m.setArtifactId( "a" );
+
+ models.contains( m );
+ }
+
+ public void testGetAllPlugins ()
+ throws ArtifactResolutionException, ArtifactNotFoundException, IOException, XmlPullParserException
+ {
+ RequirePluginVersions rule = new RequirePluginVersions();
+ String path = "target/test-classes/requirePluginVersions/getPomRecursively/b/c";
+
+ StringUtils.replace( path, "/", File.separator );
+
+ File projectDir = new File( getBasedir(), path );
+
+ MockProject project = new MockProject();
+ project.setArtifactId( "c" );
+ project.setGroupId( "group" );
+ project.setVersion( "1.0" );
+ project.setBaseDir( projectDir );
+
+ List plugins = rule.getAllPluginEntries( project );
+
+ // there should be 3
+ assertEquals( 3, plugins.size() );
+ }
+}
Added: maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/b/c/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/b/c/pom.xml?rev=571024&view=auto
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/b/c/pom.xml (added)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/b/c/pom.xml Wed Aug 29 20:27:51 2007
@@ -0,0 +1,18 @@
+<project>
+ <parent>
+ <artifactId>b</artifactId>
+ <groupId>group</groupId>
+ <version>1.0</version>
+ </parent>
+ <artifactId>c</artifactId>
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
\ No newline at end of file
Added: maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/b/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/b/pom.xml?rev=571024&view=auto
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/b/pom.xml (added)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/b/pom.xml Wed Aug 29 20:27:51 2007
@@ -0,0 +1,16 @@
+<project>
+ <parent>
+ <artifactId>a</artifactId>
+ <groupId>group</groupId>
+ <version>1.0</version>
+ </parent>
+ <artifactId>b</artifactId>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-clean-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
Added: maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/pom.xml?rev=571024&view=auto
==============================================================================
--- maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/pom.xml (added)
+++ maven/plugins/trunk/maven-enforcer-plugin/src/test/resources/requirePluginVersions/getPomRecursively/pom.xml Wed Aug 29 20:27:51 2007
@@ -0,0 +1,13 @@
+<project>
+ <artifactId>a</artifactId>
+ <groupId>group</groupId>
+ <version>1.0</version>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file