Author: skygo Date: Mon Jul 15 23:54:01 2013 New Revision: 1503525 URL: http://svn.apache.org/r1503525 Log: WIP on aggregator site. only a few artifact for plugin code A1 and shared code A2 configured. Need custom for skins (no release date) asf pom not handler
Added: maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckAggregatorsSiteMojo.java - copied, changed from r1503479, maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckSourceReleaseMojo.java Modified: maven/sandbox/trunk/dist-tools/dist-tool-plugin/pom.xml maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/ConfigurationLineInfo.java maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/resources/db/mavendb.txt Modified: maven/sandbox/trunk/dist-tools/dist-tool-plugin/pom.xml URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/dist-tools/dist-tool-plugin/pom.xml?rev=1503525&r1=1503524&r2=1503525&view=diff ============================================================================== --- maven/sandbox/trunk/dist-tools/dist-tool-plugin/pom.xml (original) +++ maven/sandbox/trunk/dist-tools/dist-tool-plugin/pom.xml Mon Jul 15 23:54:01 2013 @@ -278,6 +278,7 @@ <reports> <report>check-site</report> <report>check-source-release</report> + <report>check-aggregator</report> </reports> </reportSet> <reportSet> Modified: maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java?rev=1503525&r1=1503524&r2=1503525&view=diff ============================================================================== --- maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java (original) +++ maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java Mon Jul 15 23:54:01 2013 @@ -262,6 +262,9 @@ public abstract class AbstractDistCheckM /** * Log and add Error line to logs.txt if not configured to ignore the artifact+version * + * @param cli + * @param version + * @param ignore * @param error */ protected void addErrorLine( ConfigurationLineInfo cli, String version, List<String> ignore, String error ) Modified: maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/ConfigurationLineInfo.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/ConfigurationLineInfo.java?rev=1503525&r1=1503524&r2=1503525&view=diff ============================================================================== --- maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/ConfigurationLineInfo.java (original) +++ maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/ConfigurationLineInfo.java Mon Jul 15 23:54:01 2013 @@ -41,7 +41,7 @@ class ConfigurationLineInfo private final String artifactId; private final String forceVersion; - + private String aggregateSite; private Metadata metadata; public ConfigurationLineInfo( String[] infos ) @@ -52,6 +52,7 @@ class ConfigurationLineInfo this.artifactId = null; this.forceVersion = null; + this.aggregateSite = null; } public ConfigurationLineInfo( ConfigurationLineInfo group, String[] infos ) @@ -61,9 +62,23 @@ class ConfigurationLineInfo this.srcBin = group.isSrcBin(); this.artifactId = infos[0]; - this.forceVersion = ( infos.length > 1 ) ? infos[1] : null; + this.forceVersion = ( infos.length > 1 && !infos[1].startsWith( "A") ) ? infos[1] : null; + this.aggregateSite = null; + for ( String info : infos ) + { + if ( info.startsWith( "A" ) ) + { + this.aggregateSite = info; + } + } + } + public String getAggregatedCode() + { + return aggregateSite; + } + public String getForcedVersion() { return forceVersion; @@ -130,7 +145,8 @@ class ConfigurationLineInfo { SimpleDateFormat dateFormatter = new SimpleDateFormat( "yyyyMMddkkmmss" ); Date f = dateFormatter.parse( metadata.getVersioning().getLastUpdated() ); - SimpleDateFormat dateFormattertarget = new SimpleDateFormat( "dd-MM-yyyy" ); + // inverted for check aggregator + SimpleDateFormat dateFormattertarget = new SimpleDateFormat( "yyyy-MM-dd" ); return dateFormattertarget.format( f ); } catch ( ParseException ex ) Copied: maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckAggregatorsSiteMojo.java (from r1503479, maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckSourceReleaseMojo.java) URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckAggregatorsSiteMojo.java?p2=maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckAggregatorsSiteMojo.java&p1=maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckSourceReleaseMojo.java&r1=1503479&r2=1503525&rev=1503525&view=diff ============================================================================== --- maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckSourceReleaseMojo.java (original) +++ maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/DistCheckAggregatorsSiteMojo.java Mon Jul 15 23:54:01 2013 @@ -20,15 +20,14 @@ package org.apache.maven.dist.tools; */ import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; +import java.util.Collections; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Locale; +import java.util.Map; -import org.apache.maven.doxia.markup.HtmlMarkup; import org.apache.maven.doxia.sink.Sink; -import org.apache.maven.doxia.sink.SinkEventAttributeSet; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; @@ -44,14 +43,28 @@ import org.jsoup.select.Elements; * * @author skygo */ -@Mojo( name = "check-source-release", requiresProject = false ) -public class DistCheckSourceReleaseMojo +@Mojo( name = "check-aggregator", requiresProject = false ) +public class DistCheckAggregatorsSiteMojo extends AbstractDistCheckMojo { private static final String DIST_AREA = "http://www.apache.org/dist/maven/"; //private static final String DIST_SVNPUBSUB = "https://dist.apache.org/repos/dist/release/maven/"; + private static final Map<String, Object[]> HARDCODEDAGGREGATEREF; + static + { + Map<String, Object[]> aMap = new HashMap<>(); + aMap.put( "A1", new Object[] + { + "http://maven.apache.org/plugins/", "Plugins", 2, 3 + } ); + aMap.put( "A2", new Object[] + { + "http://maven.apache.org/shared/", "Shared", 1, 2 + } ); + HARDCODEDAGGREGATEREF = Collections.unmodifiableMap( aMap ); + } /** * Ignore dist failure for <code>artifactId</code> or <code>artifactId:version</code> */ @@ -61,93 +74,47 @@ public class DistCheckSourceReleaseMojo @Override public String getOutputName() { - return "dist-tool-checksourcerelease"; + return "dist-tool-checkaggregator"; } @Override public String getName( Locale locale ) { - return "Disttool> Source Release"; + return "Disttool> Aggregator Check"; } @Override public String getDescription( Locale locale ) { - return "Verification of source release"; + return "Verification aggregators"; } - private static class DistCheckSourceRelease + private static class DistCheckAggregatorSite extends AbstractCheckResult { - private List<String> central; - private List<String> dist; - private List<String> distOlder; - - public DistCheckSourceRelease( ConfigurationLineInfo r, String version ) + private String versionAggr; + private String dateAggr; + + public DistCheckAggregatorSite( ConfigurationLineInfo r, String version ) { super( r, version ); } - private void setMissingDistSourceRelease( List<String> checkRepos ) - { - dist = checkRepos; - } - - private void setMissingCentralSourceRelease( List<String> checkRepos ) + private void setAggregatedVersion( String ownText ) { - central = checkRepos; + this.versionAggr = ownText; } - private void setDistOlderSourceRelease( List<String> checkRepos ) + private void setAggregatedDate( String ownText ) { - distOlder = checkRepos; + this.dateAggr = ownText; } } - private final List<DistCheckSourceRelease> results = new LinkedList<>(); + private final Map<String, List<DistCheckAggregatorSite>> results = new HashMap<>(); - private static class DirectoryStatistics - { - final String directory; - int artifactsCount = 0; - int centralMissing = 0; - int distError = 0; - int distMissing = 0; - int distOlder = 0; - - public DirectoryStatistics( String directory ) - { - this.directory = directory; - } - - public boolean contains( DistCheckSourceRelease csr ) - { - return csr.getConfigurationLine().getDirectory().equals( directory ); - } - public void addArtifact( DistCheckSourceRelease result ) - { - artifactsCount++; - if ( !result.central.isEmpty() ) - { - centralMissing++; - } - if ( !result.dist.isEmpty() || !result.distOlder.isEmpty() ) - { - distError++; - } - if ( !result.dist.isEmpty() ) - { - distMissing++; - } - if ( !result.distOlder.isEmpty() ) - { - distOlder++; - } - } - } - - private void reportLine( Sink sink, DistCheckSourceRelease csr ) + private void reportLine( Sink sink, DistCheckAggregatorSite csr ) { ConfigurationLineInfo cli = csr.getConfigurationLine(); @@ -161,107 +128,32 @@ public class DistCheckSourceReleaseMojo sink.link( cli.getMetadataFileURL( repoBaseUrl ) ); sink.rawText( csr.getVersion() ); sink.link_(); - sink.tableCell_(); - - // DATE column - sink.tableCell(); - sink.rawText( csr.getConfigurationLine().getReleaseFromMetadata() ); - sink.tableCell_(); - - // central column - sink.tableCell(); - sink.link( cli.getBaseURL( repoBaseUrl, "" ) ); - sink.text( "artifact" ); - sink.link_(); - sink.text( "/" ); - sink.link( cli.getVersionnedFolderURL( repoBaseUrl, csr.getVersion() ) ); - sink.text( csr.getVersion() ); - sink.link_(); - sink.text( "/" ); - if ( csr.central.isEmpty() ) + if ( csr.getVersion().equals( csr.versionAggr ) ) { iconSuccess( sink ); } else { - iconWarning( sink ); - } - for ( String missing : csr.central ) - { - sink.lineBreak(); iconError( sink ); - sink.rawText( missing ); + sink.rawText( csr.versionAggr ); } sink.tableCell_(); - // dist column + // DATE column sink.tableCell(); - String directory = cli.getDirectory() + ( cli.isSrcBin() ? ( "/" + csr.getVersion() + "/source" ) : "" ); - sink.link( DIST_AREA + directory ); - sink.text( directory ); - sink.link_(); - sink.text( "source-release" ); - if ( csr.dist.isEmpty() && csr.distOlder.isEmpty() ) + sink.rawText( csr.getConfigurationLine().getReleaseFromMetadata() ); + if ( csr.getConfigurationLine().getReleaseFromMetadata().equals( csr.dateAggr ) ) { iconSuccess( sink ); } else { - iconWarning( sink ); - } - StringBuilder cliMissing = new StringBuilder(); - for ( String missing : csr.dist ) - { - sink.lineBreak(); iconError( sink ); - sink.rawText( missing ); - if ( !csr.central.contains( missing ) ) - { - // if the release distribution is in central repository, we can get it from there... - cliMissing.append( "\nwget " ).append( cli.getVersionnedFolderURL( repoBaseUrl, csr.getVersion() ) ). - append( "/" ).append( missing ); - cliMissing.append( "\nsvn add " ).append( missing ); - } - } - if ( !cliMissing.toString().isEmpty() ) - { - sink.lineBreak(); - SinkEventAttributeSet atts = new SinkEventAttributeSet(); - sink.unknown( "pre", new Object[] - { - new Integer( HtmlMarkup.TAG_TYPE_START ) - }, atts ); - sink.text( cliMissing.toString() ); - sink.unknown( "pre", new Object[] - { - new Integer( HtmlMarkup.TAG_TYPE_END ) - }, null ); - } - - StringBuilder cliOlder = new StringBuilder(); - for ( String missing : csr.distOlder ) - { - sink.lineBreak(); - iconRemove( sink ); - sink.rawText( missing ); - cliOlder.append( "\nsvn rm " ).append( missing ); - } - if ( !cliOlder.toString().isEmpty() ) - { - sink.lineBreak(); - SinkEventAttributeSet atts = new SinkEventAttributeSet(); - sink.unknown( "pre", new Object[] - { - new Integer( HtmlMarkup.TAG_TYPE_START ) - }, atts ); - sink.text( cliOlder.toString() ); - sink.unknown( "pre", new Object[] - { - new Integer( HtmlMarkup.TAG_TYPE_END ) - }, null ); + sink.rawText( csr.dateAggr ); } - sink.tableCell_(); + // central column + sink.tableRow_(); } @@ -282,21 +174,7 @@ public class DistCheckSourceReleaseMojo throw new MavenReportException( ex.getMessage(), ex ); } - DirectoryStatistics stats = new DirectoryStatistics( "" ); // global stats - - List<DirectoryStatistics> statistics = new ArrayList<>(); - DirectoryStatistics current = null; - for ( DistCheckSourceRelease csr : results ) - { - if ( ( current == null ) || !current.contains( csr ) ) - { - current = new DirectoryStatistics( csr.getConfigurationLine().getDirectory() ); - statistics.add( current ); - } - current.addArtifact( csr ); - stats.addArtifact( csr ); - } - + Sink sink = getSink(); sink.head(); sink.title(); @@ -326,195 +204,85 @@ public class DistCheckSourceReleaseMojo sink.text( "Older artifacts exploration is Work In Progress..." ); sink.paragraph_(); sink.section1_(); - sink.table(); - sink.tableRow(); - sink.tableHeaderCell(); - sink.rawText( "groupId/artifactId: " + String.valueOf( stats.artifactsCount ) ); - sink.tableHeaderCell_(); - sink.tableHeaderCell(); - sink.rawText( "LATEST" ); - sink.tableHeaderCell_(); - sink.tableHeaderCell(); - sink.rawText( "DATE" ); - sink.tableHeaderCell_(); - reportStatisticsHeader( stats, sink ); - sink.tableRow_(); - Iterator<DirectoryStatistics> dirs = statistics.iterator(); - current = null; - - for ( DistCheckSourceRelease csr : results ) + for ( String key : results.keySet() ) { - if ( ( current == null ) || !current.contains( csr ) ) + sink.paragraph(); + sink.text( (String) HARDCODEDAGGREGATEREF.get( key )[1] ); + sink.paragraph_(); + sink.table(); + sink.tableRow(); + sink.tableHeaderCell(); + sink.rawText( "LATEST" ); + sink.tableHeaderCell_(); + sink.tableHeaderCell(); + sink.rawText( "DATE" ); + sink.tableHeaderCell_(); + sink.tableHeaderCell(); + sink.rawText( "VERSION" ); + sink.tableHeaderCell_(); + sink.tableRow_(); + for ( DistCheckAggregatorSite csr : results.get( key ) ) { - current = dirs.next(); - - sink.tableRow(); - sink.tableHeaderCell(); - // shorten groupid - sink.rawText( csr.getConfigurationLine().getGroupId().replaceAll( "org.apache.maven", "o.a.m" ) + ": " - + String.valueOf( current.artifactsCount ) ); - sink.tableHeaderCell_(); - sink.tableHeaderCell(); - sink.rawText( " " ); - sink.tableHeaderCell_(); - sink.tableHeaderCell(); - sink.rawText( " " ); - sink.tableHeaderCell_(); - reportStatisticsHeader( current, sink ); - sink.tableRow_(); + reportLine( sink, csr ); } - - reportLine( sink, csr ); + sink.table_(); } - - sink.table_(); + sink.body_(); sink.flush(); sink.close(); } - private void reportStatisticsHeader( DirectoryStatistics current, Sink sink ) - { - sink.tableHeaderCell(); - sink.rawText( "central: " + String.valueOf( current.artifactsCount - current.centralMissing ) ); - iconSuccess( sink ); - if ( current.centralMissing > 0 ) - { - sink.rawText( "/" + String.valueOf( current.centralMissing ) ); - iconWarning( sink ); - } - sink.tableHeaderCell_(); - sink.tableHeaderCell(); - sink.rawText( "dist: " + String.valueOf( current.artifactsCount - current.distError ) ); - iconSuccess( sink ); - if ( current.distError > 0 ) - { - sink.rawText( "/" + String.valueOf( current.distError ) ); - iconWarning( sink ); - sink.rawText( "= " + String.valueOf( current.distMissing ) ); - iconError( sink ); - sink.rawText( "/" + String.valueOf( current.distOlder ) ); - iconRemove( sink ); - } - sink.tableHeaderCell_(); - } + - /** - * Report a pattern for an artifact source release. - * - * @param artifact artifact name - * @return regex - */ - protected static String getSourceReleasePattern( String artifact ) - { - /// not the safest - return "^" + artifact + "-[0-9].*source-release.*$"; - } - private Elements selectLinks( String repourl ) - throws IOException + private void checkAggregate( ConfigurationLineInfo cli , + DistCheckAggregatorSite r, Object[] inf ) throws IOException { try { - Document doc = Jsoup.connect( repourl ).get(); - return doc.select( "a[href]" ); - } - catch ( IOException ioe ) - { - throw new IOException( "IOException while reading " + repourl, ioe ); - } - } - - private List<String> checkContainsOld( String url, ConfigurationLineInfo cli, String version ) - throws IOException - { - Elements links = selectLinks( url ); - - List<String> retrievedFile = new LinkedList<>(); - for ( Element e : links ) - { - String art = e.attr( "href" ); - if ( art.matches( getSourceReleasePattern( cli.getArtifactId() ) ) ) - { - retrievedFile.add( e.attr( "href" ) ); - } - } - - List<String> expectedFiles = cli.getExpectedFilenames( version, true ); - - retrievedFile.removeAll( expectedFiles ); - - if ( !retrievedFile.isEmpty() ) - { - // write the following output in red so it's more readable in jenkins console - addErrorLine( cli, version, ignoreDistFailures, - "Older version than " + version + " for " + cli.getArtifactId() + " still available in " - + url ); - for ( String sourceItem : retrievedFile ) - { - addErrorLine( cli, version, ignoreDistFailures, " > " + sourceItem + " <" ); + Document doc = Jsoup.connect( (String) inf[0] ).get(); + Elements a = doc.select( "tr > td > a[href]:not(.externalLink)" ); + for ( Element e : a ) + { + // skins do not have release date + + String art = e.attr( "href" ); + if ( art.contains( cli.getArtifactId() ) ) + { + r.setAggregatedVersion( e.parent().parent().child( ( Integer ) inf[2] ).ownText() ); + r.setAggregatedDate( e.parent().parent().child( ( Integer ) inf[3] ).ownText() ); + } } } - - return retrievedFile; - } - - /** - * Check that url points to a directory index containing expected release files - * @param url - * @param cli - * @param version - * @return missing files - * @throws IOException - */ - private List<String> checkDirectoryIndex( String url, ConfigurationLineInfo cli, String version, boolean dist ) - throws IOException - { - List<String> retrievedFile = new LinkedList<>(); - Elements links = selectLinks( url ); - for ( Element e : links ) - { - retrievedFile.add( e.attr( "href" ) ); - } - - List<String> missingFiles; - // initialize missing files with expected release file names - missingFiles = cli.getExpectedFilenames( version, dist ); - - // removed retrieved files - missingFiles.removeAll( retrievedFile ); - - if ( !missingFiles.isEmpty() ) + catch ( IOException ioe ) { - addErrorLine( cli, version, ignoreDistFailures, "Missing file for " + cli.getArtifactId() + " in " + url ); - for ( String sourceItem : missingFiles ) - { - addErrorLine( cli, version, ignoreDistFailures, " > " + sourceItem + " <" ); - } + throw new IOException( "IOException while reading " + (String) inf[0] , ioe ); } - - return missingFiles; } - + + @Override void checkArtifact( ConfigurationLineInfo configLine, String version ) throws MojoExecutionException { try { - DistCheckSourceRelease result = new DistCheckSourceRelease( configLine, version ); - results.add( result ); - - // central - String centralUrl = configLine.getVersionnedFolderURL( repoBaseUrl, version ); - result.setMissingCentralSourceRelease( checkDirectoryIndex( centralUrl, configLine, version, false ) ); - - // dist - String distUrl = - DIST_AREA + configLine.getDirectory() + ( configLine.isSrcBin() ? ( "/" + version + "/source" ) : "" ); - result.setMissingDistSourceRelease( checkDirectoryIndex( distUrl, configLine, version, true ) ); - result.setDistOlderSourceRelease( checkContainsOld( distUrl, configLine, version ) ); + DistCheckAggregatorSite result = new DistCheckAggregatorSite( configLine, version ); + + if ( configLine.getAggregatedCode() != null ) + { + if ( results.get( configLine.getAggregatedCode() ) == null ) + { + results.put( configLine.getAggregatedCode(), new LinkedList<DistCheckAggregatorSite>() ); + } + results.get( configLine.getAggregatedCode() ).add( result ); + checkAggregate( configLine, result, HARDCODEDAGGREGATEREF.get( configLine.getAggregatedCode() ) ); + + + } + } catch ( IOException ex ) { Modified: maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/resources/db/mavendb.txt URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/resources/db/mavendb.txt?rev=1503525&r1=1503524&r2=1503525&view=diff ============================================================================== --- maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/resources/db/mavendb.txt (original) +++ maven/sandbox/trunk/dist-tools/dist-tool-plugin/src/main/resources/db/mavendb.txt Mon Jul 15 23:54:01 2013 @@ -41,19 +41,19 @@ plugins org.apache.maven.plugins maven-changelog-plugin maven-changes-plugin maven-checkstyle-plugin - maven-clean-plugin - maven-compiler-plugin + maven-clean-plugin A1 + maven-compiler-plugin A1 maven-dependency-plugin - maven-deploy-plugin + maven-deploy-plugin A1 maven-doap-plugin maven-docck-plugin - maven-ear-plugin + maven-ear-plugin A1 maven-eclipse-plugin maven-ejb-plugin maven-gpg-plugin maven-help-plugin maven-idea-plugin - maven-install-plugin + maven-install-plugin A1 maven-invoker-plugin maven-jar-plugin maven-jarsigner-plugin @@ -69,7 +69,7 @@ plugins org.apache.maven.plugins maven-reactor-plugin maven-remote-resources-plugin maven-repository-plugin - maven-resources-plugin + maven-resources-plugin A1 maven-scm-publish-plugin maven-shade-plugin maven-site-plugin @@ -79,7 +79,7 @@ plugins org.apache.maven.plugins maven-verifier-plugin maven-war-plugin release org.apache.maven.release - maven-release 2.4.1 + maven-release 2.4.1 A1 reporting org.apache.maven.reporting maven-reporting-api maven-reporting-exec @@ -97,7 +97,7 @@ shared org.apache.maven.shared maven-dependency-tree maven-doxia-tools maven-filtering - maven-invoker + maven-invoker A2 maven-jarsigner maven-model-converter maven-repository-builder @@ -110,7 +110,7 @@ shared org.apache.maven.shared maven-shared-utils maven-verifier shared org.apache.maven - maven-archiver + maven-archiver A2 skins org.apache.maven.skins maven-application-skin maven-classic-skin