[ https://jira.codehaus.org/browse/MENFORCER-121?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=334685#comment-334685 ]
Lars Gohlke commented on MENFORCER-121: --------------------------------------- I implemented this as optional for DependencyConvergence and offer a patch for this here against r1535845 {code} Index: enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java (revision 1535845) +++ enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java (revision ) @@ -24,6 +24,7 @@ import java.util.List; import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.DefaultArtifact; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.metadata.ArtifactMetadataSource; import org.apache.maven.artifact.repository.ArtifactRepository; @@ -41,7 +42,11 @@ import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.i18n.I18N; +import org.codehaus.plexus.util.FileUtils; +import java.io.File; +import java.io.IOException; +import com.thoughtworks.xstream.XStream; /** * @author <a href="mailto:r...@e-hoffman.org">Rex Hoffman</a> */ @@ -52,20 +57,26 @@ private static Log log; private static I18N i18n; - - private boolean uniqueVersions; + + private boolean uniqueVersions; public void setUniqueVersions( boolean uniqueVersions ) { this.uniqueVersions = uniqueVersions; } - + + private File xmlReport; + + public void setXmlReport(File xmlReport) { + this.xmlReport = xmlReport; + } + /** * Uses the {@link EnforcerRuleHelper} to populate the values of the * {@link DependencyTreeBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)} * factory method. <br/> * This method simply exists to hide all the ugly lookup that the {@link EnforcerRuleHelper} has to do. - * + * * @param helper * @return a Dependency Node which is the root of the project's dependency tree * @throws EnforcerRuleException @@ -121,7 +132,11 @@ visitor.setUniqueVersions( uniqueVersions ); node.accept( visitor ); List<CharSequence> errorMsgs = new ArrayList<CharSequence>(); - errorMsgs.addAll( getConvergenceErrorMsgs( visitor.getConflictedVersionNumbers() ) ); + + List<List<DependencyNode>> conflictedVersionNumbers = visitor.getConflictedVersionNumbers(); + errorMsgs.addAll( getConvergenceErrorMsgs(conflictedVersionNumbers) ); + writeConflictedVersionNumbers(conflictedVersionNumbers); + for ( CharSequence errorMsg : errorMsgs ) { log.warn( errorMsg ); @@ -138,6 +153,24 @@ catch ( Exception e ) { throw new EnforcerRuleException( e.getLocalizedMessage(), e ); + } + } + + private void writeConflictedVersionNumbers(List<List<DependencyNode>> conflictedVersionNumbers) { + if ( null != xmlReport ){ + XStream xStream = new XStream(); + xStream.omitField(DefaultArtifact.class,"artifactHandler"); + xStream.omitField(DefaultArtifact.class,"versionRange"); + xStream.omitField(DependencyNode.class,"parent"); + xStream.omitField(DependencyNode.class,"state"); + + xStream.alias("dependency",DependencyNode.class); + + try { + FileUtils.fileWrite(xmlReport.getAbsolutePath(),xStream.toXML(conflictedVersionNumbers)); + } catch (IOException e) { + throw new IllegalStateException(e); + } } } @@ -222,7 +255,7 @@ * allow double checking of the results. Most of the time this can be done by generating unique ids, but sometimes * the results of objects returned by the helper need to be queried. You may for example, store certain objects in * your rule and then query them later. - * + * * @param rule */ public boolean isResultValid( EnforcerRule rule ) \ No newline at end of file Index: enforcer-rules/pom.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- enforcer-rules/pom.xml (revision 1535845) +++ enforcer-rules/pom.xml (revision ) @@ -15,7 +15,7 @@ * "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. + * under the License. * --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> @@ -93,7 +93,12 @@ <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-i18n</artifactId> <version>1.0-beta-6</version> - </dependency> + </dependency> + <dependency> + <groupId>com.thoughtworks.xstream</groupId> + <artifactId>xstream</artifactId> + <version>1.4.5</version> + </dependency> </dependencies> <build> {code} Any comments are welcome! I'd like to have this merged for decouple http://docs.codehaus.org/display/SONAR/SonarQube+Mojo+Bridge. Currently it injects very tight coupled a mojo while runtime. Makes a lot of problems between the maven versions - as it can be expected. ;) Cheers Lars > Enforcer Plugin Output As Report > -------------------------------- > > Key: MENFORCER-121 > URL: https://jira.codehaus.org/browse/MENFORCER-121 > Project: Maven Enforcer Plugin > Issue Type: New Feature > Components: Plugin > Reporter: Shaun > > It would be useful if the output from the enforcer plugin could be in a > report format such as HTML, XML, etc. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira