Repository: maven Updated Branches: refs/heads/MNG-3507 716a59661 -> 7e7be4b58 (forced update)
[MNG-6093] use monkey patched slf4j-simple provider with Maven color Project: http://git-wip-us.apache.org/repos/asf/maven/repo Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/7e7be4b5 Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/7e7be4b5 Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/7e7be4b5 Branch: refs/heads/MNG-3507 Commit: 7e7be4b585e5b9dee7cac97e967bdec17225d3d2 Parents: 0f8b458 Author: Hervé Boutemy <hbout...@apache.org> Authored: Thu Sep 22 17:46:53 2016 +0200 Committer: Hervé Boutemy <hbout...@apache.org> Committed: Sun Jan 22 23:41:25 2017 +0100 ---------------------------------------------------------------------- apache-maven/pom.xml | 4 +- .../maven/slf4j-configuration.properties | 1 + maven-slf4j-provider/pom.xml | 116 +++++++++++++++++++ .../java/org/slf4j/impl/MavenSimpleLogger.java | 115 ++++++++++++++++++ .../slf4j/impl/MavenSimpleLoggerFactory.java | 44 +++++++ .../src/main/script/patch-slf4j-simple.groovy | 53 +++++++++ maven-slf4j-provider/src/site/site.xml | 36 ++++++ pom.xml | 6 + src/site/xdoc/index.xml | 2 + 9 files changed, 375 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/7e7be4b5/apache-maven/pom.xml ---------------------------------------------------------------------- diff --git a/apache-maven/pom.xml b/apache-maven/pom.xml index 436aa9d..3b77250 100644 --- a/apache-maven/pom.xml +++ b/apache-maven/pom.xml @@ -88,8 +88,8 @@ <artifactId>aether-transport-wagon</artifactId> </dependency> <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-simple</artifactId> + <groupId>org.apache.maven</groupId> + <artifactId>maven-slf4j-provider</artifactId> </dependency> <dependency> <groupId>org.fusesource.jansi</groupId> http://git-wip-us.apache.org/repos/asf/maven/blob/7e7be4b5/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties ---------------------------------------------------------------------- diff --git a/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties b/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties index 8741836..ae1bc39 100644 --- a/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties +++ b/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties @@ -18,5 +18,6 @@ # key = Slf4j effective logger factory implementation # value = corresponding o.a.m.cli.logging.Slf4jConfiguration class org.slf4j.impl.SimpleLoggerFactory org.apache.maven.cli.logging.impl.Slf4jSimpleConfiguration +org.slf4j.impl.MavenSimpleLoggerFactory org.apache.maven.cli.logging.impl.Slf4jSimpleConfiguration org.slf4j.helpers.Log4jLoggerFactory org.apache.maven.cli.logging.impl.Log4j2Configuration ch.qos.logback.classic.LoggerContext org.apache.maven.cli.logging.impl.LogbackConfiguration http://git-wip-us.apache.org/repos/asf/maven/blob/7e7be4b5/maven-slf4j-provider/pom.xml ---------------------------------------------------------------------- diff --git a/maven-slf4j-provider/pom.xml b/maven-slf4j-provider/pom.xml new file mode 100644 index 0000000..81af382 --- /dev/null +++ b/maven-slf4j-provider/pom.xml @@ -0,0 +1,116 @@ +<?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 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"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.maven</groupId> + <artifactId>maven</artifactId> + <version>3.5.0-SNAPSHOT</version> + </parent> + + <artifactId>maven-slf4j-provider</artifactId> + + <name>Maven SLF4J Simple Provider</name> + <description> + Maven SLF4J provider based on SLF4J's simple provider, monkey-patched to support Maven styled colors + for levels and stacktraces rendering. + </description> + + <dependencies> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-shared-utils</artifactId> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <configuration> + <artifactItems> + <artifactItem> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <version>${slf4jVersion}</version> + <type>jar</type> + <classifier>sources</classifier> + <overWrite>false</overWrite> + <outputDirectory>${project.build.directory}/generated-sources/slf4j-simple</outputDirectory> + <includes>org/slf4j/impl/*.java</includes> + </artifactItem> + </artifactItems> + </configuration> + <executions> + <execution> + <id>unzip-slf4j-simple</id> + <goals> + <goal>unpack</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <version>1.12</version> + <executions> + <execution> + <id>add-slf4j-simple</id> + <phase>generate-sources</phase> + <goals> + <goal>add-source</goal> + </goals> + <configuration> + <sources> + <source>${project.build.directory}/generated-sources/slf4j-simple</source> + </sources> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.codehaus.gmaven</groupId> + <artifactId>groovy-maven-plugin</artifactId> + <version>2.0</version> + <executions> + <execution> + <id>patch-slf4j-simple</id> + <phase>process-sources</phase> + <goals> + <goal>execute</goal> + </goals> + <configuration> + <source>${project.basedir}/src/main/script/patch-slf4j-simple.groovy</source> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/maven/blob/7e7be4b5/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLogger.java ---------------------------------------------------------------------- diff --git a/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLogger.java b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLogger.java new file mode 100644 index 0000000..17f1f48 --- /dev/null +++ b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLogger.java @@ -0,0 +1,115 @@ +package org.slf4j.impl; + +/* + * 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 static org.apache.maven.shared.utils.logging.MessageUtils.buffer; + +import java.io.PrintStream; + +/** + * Logger for Maven, that support colorization of levels and stacktraces. + * This class implements 2 methods introduced in slf4j-simple provider local copy. + * @since 3.5.0 + */ +public class MavenSimpleLogger + extends SimpleLogger +{ + MavenSimpleLogger( String name ) + { + super( name ); + } + + @Override + protected String renderLevel( int level ) + { + switch ( level ) + { + case LOG_LEVEL_TRACE: + return buffer().debug( "TRACE" ).toString(); + case LOG_LEVEL_DEBUG: + return buffer().debug( "DEBUG" ).toString(); + case LOG_LEVEL_INFO: + return buffer().info( "INFO" ).toString(); + case LOG_LEVEL_WARN: + return buffer().warning( "WARNING" ).toString(); + case LOG_LEVEL_ERROR: + default: + return buffer().error( "ERROR" ).toString(); + } + } + + @Override + protected void renderThrowable( Throwable t, PrintStream stream ) + { + stream.print( buffer().failure( t.getClass().getName() ) ); + if ( t.getMessage() != null ) + { + stream.print( ": " ); + stream.print( buffer().failure( t.getMessage() ) ); + } + stream.println(); + + while ( t != null ) + { + for ( StackTraceElement e : t.getStackTrace() ) + { + stream.print( " " ); + stream.print( buffer().strong( "at" ) ); + stream.print( " " + e.getClassName() + "." + e.getMethodName() ); + stream.print( buffer().a( " (" ).strong( getLocation( e ) ).a( ")" ) ); + stream.println(); + } + + t = t.getCause(); + if ( t != null ) + { + stream.print( buffer().strong( "Caused by" ).a( ": " ).a( t.getClass().getName() ) ); + if ( t.getMessage() != null ) + { + stream.print( ": " ); + stream.print( buffer().failure( t.getMessage() ) ); + } + stream.println(); + } + } + } + + protected String getLocation( final StackTraceElement e ) + { + assert e != null; + + if ( e.isNativeMethod() ) + { + return "Native Method"; + } + else if ( e.getFileName() == null ) + { + return "Unknown Source"; + } + else if ( e.getLineNumber() >= 0 ) + { + return String.format( "%s:%s", e.getFileName(), e.getLineNumber() ); + } + else + { + return e.getFileName(); + } + } +} http://git-wip-us.apache.org/repos/asf/maven/blob/7e7be4b5/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java ---------------------------------------------------------------------- diff --git a/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java new file mode 100644 index 0000000..d56e346 --- /dev/null +++ b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java @@ -0,0 +1,44 @@ +package org.slf4j.impl; + +/* + * 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 org.slf4j.Logger; + +public class MavenSimpleLoggerFactory + extends SimpleLoggerFactory +{ + /** + * Return an appropriate {@link MavenSimpleLogger} instance by name. + */ + public Logger getLogger( String name ) + { + Logger simpleLogger = loggerMap.get( name ); + if ( simpleLogger != null ) + { + return simpleLogger; + } + else + { + Logger newInstance = new MavenSimpleLogger( name ); + Logger oldInstance = loggerMap.putIfAbsent( name, newInstance ); + return oldInstance == null ? newInstance : oldInstance; + } + } +} http://git-wip-us.apache.org/repos/asf/maven/blob/7e7be4b5/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy ---------------------------------------------------------------------- diff --git a/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy b/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy new file mode 100644 index 0000000..bba8646 --- /dev/null +++ b/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy @@ -0,0 +1,53 @@ + +/* + * 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. + */ + +dir = new File( basedir, 'target/generated-sources/slf4j-simple/org/slf4j/impl' ); + +file = new File( dir, 'StaticLoggerBinder.java' ); +content = file.text; + +// check if already patched +if ( content.contains( 'MavenSimpleLoggerFactory' ) ) +{ + println ' slf4j-simple already patched'; + return; +} + + +println ' patching StaticLoggerBinder.java'; +content = content.replaceAll( 'SimpleLoggerFactory', 'MavenSimpleLoggerFactory' ); +file.write( content ); + + +println ' patching SimpleLogger.java'; +file = new File( dir, 'SimpleLogger.java' ); +content = file.text; +content = content.replaceAll( 'private static final int LOG_LEVEL_', 'protected static final int LOG_LEVEL_' ); +content = content.replaceAll( 't.printStackTrace(TARGET_STREAM)', 'renderThrowable(t, TARGET_STREAM);' ); + +index = content.indexOf( 'switch (level) {' ); +end = content.indexOf( '}', index ) + 1; +content = content.substring( 0, index ) + 'buf.append(renderLevel(level));' + content.substring( end ); + +content = content.substring( 0, content.lastIndexOf( '}' ) ); +content += ' protected void renderThrowable(Throwable t, PrintStream stream) {}\n'; +content += ' protected String renderLevel(int level) { return ""; }\n}\n'; + +file.write( content ); http://git-wip-us.apache.org/repos/asf/maven/blob/7e7be4b5/maven-slf4j-provider/src/site/site.xml ---------------------------------------------------------------------- diff --git a/maven-slf4j-provider/src/site/site.xml b/maven-slf4j-provider/src/site/site.xml new file mode 100644 index 0000000..3a16bf9 --- /dev/null +++ b/maven-slf4j-provider/src/site/site.xml @@ -0,0 +1,36 @@ +<?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 xmlns="http://maven.apache.org/DECORATION/1.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd"> + <body> + <menu name="Overview"> + <item name="Introduction" href="index.html"/> + <item name="JavaDocs" href="apidocs/index.html"/> + <item name="Source Xref" href="xref/index.html"/> + <!--item name="FAQ" href="faq.html"/--> + </menu> + + <menu ref="parent"/> + <menu ref="reports"/> + </body> +</project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/maven/blob/7e7be4b5/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index f8b67aa..fba262b 100644 --- a/pom.xml +++ b/pom.xml @@ -84,6 +84,7 @@ <module>maven-artifact</module> <module>maven-aether-provider</module> <module>maven-repository-metadata</module> + <module>maven-slf4j-provider</module> <module>maven-embedder</module> <module>maven-compat</module> <module>apache-maven</module> @@ -217,6 +218,11 @@ <artifactId>maven-builder-support</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-slf4j-provider</artifactId> + <version>${project.version}</version> + </dependency> <!--bootstrap-end-comment--> <!-- Plexus --> <dependency> http://git-wip-us.apache.org/repos/asf/maven/blob/7e7be4b5/src/site/xdoc/index.xml ---------------------------------------------------------------------- diff --git a/src/site/xdoc/index.xml b/src/site/xdoc/index.xml index b98b4ee..11fa0de 100644 --- a/src/site/xdoc/index.xml +++ b/src/site/xdoc/index.xml @@ -55,6 +55,8 @@ <area shape="rect" coords="446,234,537,269" alt="maven-settings" href="maven-settings/" /> <area shape="rect" coords="388,284,521,319" alt="maven-model-builder" href="maven-model-builder/" /> <area shape="rect" coords="409,342,500,378" alt="maven-model" href="maven-model/" /> + <area shape="rect" coords="TODO" alt="maven-slf4j-provider" href="maven-slf4j-provider/" /> + <area shape="rect" coords="88,59,192,94" alt="slf4j-api" href="http://www.slf4j.org/manual.html" /> <area shape="rect" coords="551,58,707,94" alt="commons-cli" href="http://commons.apache.org/cli/" /> <area shape="rect" coords="551,116,739,152" alt="wagon-provider-api" href="http://maven.apache.org/wagon/wagon-provider-api/" /> <area shape="rect" coords="550,175,690,211" alt="plexus-sec-dispatcher" href="https://github.com/codehaus-plexus/plexus-sec-dispatcher" />