Class ReactorModuleConvergence
- java.lang.Object
-
- org.apache.maven.plugins.enforcer.AbstractStandardEnforcerRule
-
- org.apache.maven.plugins.enforcer.AbstractNonCacheableEnforcerRule
-
- org.apache.maven.plugins.enforcer.ReactorModuleConvergence
-
- All Implemented Interfaces:
EnforcerRule
,EnforcerRule2
public class ReactorModuleConvergence extends AbstractNonCacheableEnforcerRule
This rule will check if a multi module build will follow the best practices.- Since:
- 1.4
-
-
Field Summary
Fields Modifier and Type Field Description private boolean
ignoreModuleDependencies
private org.apache.maven.plugin.logging.Log
logger
private static java.lang.String
MODULE_TEXT
-
Constructor Summary
Constructors Constructor Description ReactorModuleConvergence()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
addDep(java.util.Map<org.apache.maven.project.MavenProject,java.util.List<org.apache.maven.model.Dependency>> result, org.apache.maven.project.MavenProject project, org.apache.maven.model.Dependency dependency)
Convenience method to handle adding a dependency to the Map of List.private void
addMessageIfExist(java.lang.StringBuilder sb)
This will add the given user message to the output.private java.util.List<org.apache.maven.project.MavenProject>
areParentsFromTheReactor(java.lang.String reactorVersion, java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
private java.util.Map<org.apache.maven.project.MavenProject,java.util.List<org.apache.maven.model.Dependency>>
areThereDependenciesWhichAreNotPartOfTheReactor(java.lang.String reactorVersion, java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
Go through the list of modules in the builds and check if we have dependencies.private void
checkDependenciesWithinReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
private void
checkMissingParentsInReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
Convenience method to create a user readable message.private void
checkParentsInReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
Convenience method to create a user readable message.private void
checkParentsPartOfTheReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
private void
checkReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
Convenience method to create user readable message.void
execute(EnforcerRuleHelper helper)
This is the interface into the rule.private java.util.List<org.apache.maven.project.MavenProject>
existModulesWithoutParentsInReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
Assume we have a module which is a child of a multi module build but this child does not have a parent.private java.util.List<org.apache.maven.project.MavenProject>
existParentsWhichAreNotPartOfTheReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
private boolean
hasDependencies(java.util.List<org.apache.maven.model.Dependency> dependencies)
private boolean
hasParent(org.apache.maven.project.MavenProject mavenProject)
private boolean
isDependencyPartOfTheReactor(org.apache.maven.model.Dependency dependency, java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
private boolean
isGAPartOfTheReactor(java.lang.String groupId, java.lang.String artifactId, java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
This will check if the givengroupId/artifactId
is part of the current reactor.boolean
isIgnoreModuleDependencies()
private boolean
isProjectPartOfTheReactor(org.apache.maven.project.MavenProject project, java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
This will check of the groupId/artifactId can be found in any reactor project.private java.util.List<org.apache.maven.project.MavenProject>
isReactorVersionConsistent(java.util.List<org.apache.maven.project.MavenProject> projectList)
This method will check the following situation within a multi-module build.void
setIgnoreModuleDependencies(boolean ignoreModuleDependencies)
-
Methods inherited from class org.apache.maven.plugins.enforcer.AbstractNonCacheableEnforcerRule
getCacheId, isCacheable, isResultValid
-
Methods inherited from class org.apache.maven.plugins.enforcer.AbstractStandardEnforcerRule
getLevel, getMessage, setLevel, setMessage
-
-
-
-
Field Detail
-
MODULE_TEXT
private static final java.lang.String MODULE_TEXT
- See Also:
- Constant Field Values
-
ignoreModuleDependencies
private boolean ignoreModuleDependencies
-
logger
private org.apache.maven.plugin.logging.Log logger
-
-
Method Detail
-
execute
public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException
Description copied from interface:EnforcerRule
This is the interface into the rule. This method should throw an exception containing a reason message if the rule fails the check. The plugin will then decide based on the fail flag if it should stop or just log the message as a warning.- Parameters:
helper
- The helper provides access to the log, MavenSession and has helpers to get common components. It is also able to lookup components by class name.- Throws:
EnforcerRuleException
- the enforcer rule exception
-
checkParentsPartOfTheReactor
private void checkParentsPartOfTheReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects) throws EnforcerRuleException
- Throws:
EnforcerRuleException
-
checkMissingParentsInReactor
private void checkMissingParentsInReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects) throws EnforcerRuleException
Convenience method to create a user readable message.- Parameters:
sortedProjects
- The list of reactor projects.- Throws:
EnforcerRuleException
- In case of a violation.
-
checkDependenciesWithinReactor
private void checkDependenciesWithinReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects) throws EnforcerRuleException
- Throws:
EnforcerRuleException
-
checkParentsInReactor
private void checkParentsInReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects) throws EnforcerRuleException
Convenience method to create a user readable message.- Parameters:
sortedProjects
- The list of reactor projects.- Throws:
EnforcerRuleException
- In case of a violation.
-
checkReactor
private void checkReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects) throws EnforcerRuleException
Convenience method to create user readable message.- Parameters:
sortedProjects
- The list of reactor projects.- Throws:
EnforcerRuleException
- In case of a violation.
-
areParentsFromTheReactor
private java.util.List<org.apache.maven.project.MavenProject> areParentsFromTheReactor(java.lang.String reactorVersion, java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
-
existParentsWhichAreNotPartOfTheReactor
private java.util.List<org.apache.maven.project.MavenProject> existParentsWhichAreNotPartOfTheReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
-
isProjectPartOfTheReactor
private boolean isProjectPartOfTheReactor(org.apache.maven.project.MavenProject project, java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
This will check of the groupId/artifactId can be found in any reactor project. The version will be ignored cause versions are checked before.- Parameters:
project
- The project which should be checked if it is contained in the sortedProjects.sortedProjects
- The list of existing projects.- Returns:
- true if the project has been found within the list false otherwise.
-
isDependencyPartOfTheReactor
private boolean isDependencyPartOfTheReactor(org.apache.maven.model.Dependency dependency, java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
-
isGAPartOfTheReactor
private boolean isGAPartOfTheReactor(java.lang.String groupId, java.lang.String artifactId, java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
This will check if the givengroupId/artifactId
is part of the current reactor.- Parameters:
groupId
- The groupIdartifactId
- The artifactIdsortedProjects
- The list of projects within the reactor.- Returns:
- true if the groupId/artifactId is part of the reactor false otherwise.
-
existModulesWithoutParentsInReactor
private java.util.List<org.apache.maven.project.MavenProject> existModulesWithoutParentsInReactor(java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
Assume we have a module which is a child of a multi module build but this child does not have a parent. This method will exactly search for such cases.- Parameters:
sortedProjects
- The sorted list of the reactor modules.- Returns:
- The resulting list will contain the modules in the reactor which do not have a parent. The list will never null. If the list is empty no violation have happened.
-
addDep
private void addDep(java.util.Map<org.apache.maven.project.MavenProject,java.util.List<org.apache.maven.model.Dependency>> result, org.apache.maven.project.MavenProject project, org.apache.maven.model.Dependency dependency)
Convenience method to handle adding a dependency to the Map of List.- Parameters:
result
- The result List which should be handled.project
- The MavenProject which will be added.dependency
- The dependency which will be added.
-
areThereDependenciesWhichAreNotPartOfTheReactor
private java.util.Map<org.apache.maven.project.MavenProject,java.util.List<org.apache.maven.model.Dependency>> areThereDependenciesWhichAreNotPartOfTheReactor(java.lang.String reactorVersion, java.util.List<org.apache.maven.project.MavenProject> sortedProjects)
Go through the list of modules in the builds and check if we have dependencies. If yes we will check every dependency based on groupId/artifactId if it belongs to the multi module build. In such a case it will be checked if the version does fit the version in the rest of build.- Parameters:
reactorVersion
- The version of the reactor.sortedProjects
- The list of existing projects within this build.- Returns:
- List of violations. Never null. If the list is empty than no violation has happened.
-
isReactorVersionConsistent
private java.util.List<org.apache.maven.project.MavenProject> isReactorVersionConsistent(java.util.List<org.apache.maven.project.MavenProject> projectList)
This method will check the following situation within a multi-module build.<parent> <groupId>...</groupId> <artifactId>...</artifactId> <version>1.0-SNAPSHOT</version> </parent> <version>1.1-SNAPSHOT</version>
- Parameters:
projectList
- The sorted list of the reactor modules.- Returns:
- The resulting list will contain the modules in the reactor which do the thing in the example above. The list will never null. If the list is empty no violation have happened.
-
hasDependencies
private boolean hasDependencies(java.util.List<org.apache.maven.model.Dependency> dependencies)
-
hasParent
private boolean hasParent(org.apache.maven.project.MavenProject mavenProject)
-
isIgnoreModuleDependencies
public boolean isIgnoreModuleDependencies()
-
setIgnoreModuleDependencies
public void setIgnoreModuleDependencies(boolean ignoreModuleDependencies)
-
addMessageIfExist
private void addMessageIfExist(java.lang.StringBuilder sb)
This will add the given user message to the output.- Parameters:
sb
- The already initialized exception message part.
-
-