Author: rfscholte Date: Sat Feb 7 12:45:54 2015 New Revision: 1658054 URL: http://svn.apache.org/r1658054 Log: Introduce JDepsConsumer to analyze the output
Added: maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_main/verify.groovy maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/src/main/ maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/src/main/java/ maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/src/main/java/Main.java maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/verify.groovy maven/plugins/trunk/maven-jdeps-plugin/src/main/java/org/apache/maven/plugin/jdeps/consumers/ maven/plugins/trunk/maven-jdeps-plugin/src/main/java/org/apache/maven/plugin/jdeps/consumers/JDepsConsumer.java maven/plugins/trunk/maven-jdeps-plugin/src/test/ maven/plugins/trunk/maven-jdeps-plugin/src/test/java/ maven/plugins/trunk/maven-jdeps-plugin/src/test/java/org/ maven/plugins/trunk/maven-jdeps-plugin/src/test/java/org/apache/ maven/plugins/trunk/maven-jdeps-plugin/src/test/java/org/apache/maven/ maven/plugins/trunk/maven-jdeps-plugin/src/test/java/org/apache/maven/plugin/ maven/plugins/trunk/maven-jdeps-plugin/src/test/java/org/apache/maven/plugin/jdeps/ maven/plugins/trunk/maven-jdeps-plugin/src/test/java/org/apache/maven/plugin/jdeps/consumers/ maven/plugins/trunk/maven-jdeps-plugin/src/test/java/org/apache/maven/plugin/jdeps/consumers/JDepsConsumerTest.java Modified: maven/plugins/trunk/maven-jdeps-plugin/pom.xml maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/pom.xml maven/plugins/trunk/maven-jdeps-plugin/src/main/java/org/apache/maven/plugin/jdeps/AbstractJDepsMojo.java Modified: maven/plugins/trunk/maven-jdeps-plugin/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeps-plugin/pom.xml?rev=1658054&r1=1658053&r2=1658054&view=diff ============================================================================== --- maven/plugins/trunk/maven-jdeps-plugin/pom.xml (original) +++ maven/plugins/trunk/maven-jdeps-plugin/pom.xml Sat Feb 7 12:45:54 2015 @@ -78,5 +78,13 @@ under the License. <artifactId>commons-lang</artifactId> <version>2.4</version> </dependency> + + <!-- TEST --> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.11</version> + <scope>test</scope> + </dependency> </dependencies> </project> \ No newline at end of file Added: maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_main/verify.groovy URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_main/verify.groovy?rev=1658054&view=auto ============================================================================== --- maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_main/verify.groovy (added) +++ maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_main/verify.groovy Sat Feb 7 12:45:54 2015 @@ -0,0 +1,24 @@ + +/* + * 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. + */ + +def LS = System.getProperty("line.separator") + +def buildLog = new File( basedir, 'build.log' ) +assert buildLog.text.contains( "Found offending packages:${LS} sun.misc -> JDK internal API (java.base)" ); \ No newline at end of file Modified: maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/pom.xml?rev=1658054&r1=1658053&r2=1658054&view=diff ============================================================================== --- maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/pom.xml (original) +++ maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/pom.xml Sat Feb 7 12:45:54 2015 @@ -41,6 +41,7 @@ under the License. <executions> <execution> <goals> + <goal>jdkinternals</goal> <goal>test-jdkinternals</goal> </goals> </execution> Added: maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/src/main/java/Main.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/src/main/java/Main.java?rev=1658054&view=auto ============================================================================== --- maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/src/main/java/Main.java (added) +++ maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/src/main/java/Main.java Sat Feb 7 12:45:54 2015 @@ -0,0 +1,28 @@ +/* + * 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. + */ + +public class Main +{ + + public static void main( String[] args ) + { + System.out.println( "Hello world!" ); + } + +} Added: maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/verify.groovy URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/verify.groovy?rev=1658054&view=auto ============================================================================== --- maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/verify.groovy (added) +++ maven/plugins/trunk/maven-jdeps-plugin/src/it/unsupported-api_test/verify.groovy Sat Feb 7 12:45:54 2015 @@ -0,0 +1,24 @@ + +/* + * 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. + */ + +def LS = System.getProperty("line.separator") + +def buildLog = new File( basedir, 'build.log' ) +assert buildLog.text.contains( "Found offending packages:${LS} sun.misc -> JDK internal API (java.base)" ); \ No newline at end of file Modified: maven/plugins/trunk/maven-jdeps-plugin/src/main/java/org/apache/maven/plugin/jdeps/AbstractJDepsMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeps-plugin/src/main/java/org/apache/maven/plugin/jdeps/AbstractJDepsMojo.java?rev=1658054&r1=1658053&r2=1658054&view=diff ============================================================================== --- maven/plugins/trunk/maven-jdeps-plugin/src/main/java/org/apache/maven/plugin/jdeps/AbstractJDepsMojo.java (original) +++ maven/plugins/trunk/maven-jdeps-plugin/src/main/java/org/apache/maven/plugin/jdeps/AbstractJDepsMojo.java Sat Feb 7 12:45:54 2015 @@ -21,6 +21,7 @@ package org.apache.maven.plugin.jdeps; import java.io.File; import java.io.IOException; +import java.util.Map; import java.util.Properties; import java.util.StringTokenizer; @@ -30,6 +31,7 @@ import org.apache.maven.execution.MavenS import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugin.jdeps.consumers.JDepsConsumer; import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; @@ -127,6 +129,12 @@ public abstract class AbstractJDepsMojo public void execute() throws MojoExecutionException, MojoFailureException { + if ( !new File( getClassesDirectory() ).exists() ) + { + getLog().debug( "No classes to analyze" ); + return; + } + String jExecutable; try { @@ -144,7 +152,23 @@ public abstract class AbstractJDepsMojo addJDepsOptions( cmd ); addJDepsClasses( cmd ); - executeJavadocCommandLine( cmd, outputDirectory ); + JDepsConsumer consumer = new JDepsConsumer(); + executeJavadocCommandLine( cmd, outputDirectory, consumer ); + + // @ TODO if there will be more goals, this should be pushed down to AbstractJDKInternals + if ( consumer.getOffendingPackages().size() > 0 ) + { + final String ls = System.getProperty( "line.separator" ); + + StringBuilder msg = new StringBuilder(); + msg.append( "Found offending packages:" ).append( ls ); + for ( Map.Entry<String, String> offendingPackage : consumer.getOffendingPackages().entrySet() ) + { + msg.append( ' ' ).append( offendingPackage.getKey() ) + .append( " -> " ).append( offendingPackage.getValue() ).append( ls ); + } + throw new MojoExecutionException( msg.toString() ); + } } protected void addJDepsOptions( Commandline cmd ) @@ -223,7 +247,7 @@ public abstract class AbstractJDepsMojo cmd.createArg().setValue( "-R" ); } - cmd.createArg().setValue( "-version" ); + // cmd.createArg().setValue( "-version" ); } protected void addJDepsClasses( Commandline cmd ) @@ -322,7 +346,9 @@ public abstract class AbstractJDepsMojo return jdepsExe.getAbsolutePath(); } - private void executeJavadocCommandLine( Commandline cmd, File javadocOutputDirectory ) throws MojoExecutionException + private void executeJavadocCommandLine( Commandline cmd, File jOutputDirectory, + CommandLineUtils.StringStreamConsumer consumer ) + throws MojoExecutionException { if ( getLog().isDebugEnabled() ) { @@ -330,8 +356,18 @@ public abstract class AbstractJDepsMojo getLog().debug( CommandLineUtils.toString( cmd.getCommandline() ).replaceAll( "'", "" ) ); } + CommandLineUtils.StringStreamConsumer err = new CommandLineUtils.StringStreamConsumer(); - CommandLineUtils.StringStreamConsumer out = new CommandLineUtils.StringStreamConsumer(); + CommandLineUtils.StringStreamConsumer out; + if ( consumer != null ) + { + out = consumer; + } + else + { + out = new CommandLineUtils.StringStreamConsumer(); + } + try { int exitCode = CommandLineUtils.executeCommandLine( cmd, out, err ); Added: maven/plugins/trunk/maven-jdeps-plugin/src/main/java/org/apache/maven/plugin/jdeps/consumers/JDepsConsumer.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeps-plugin/src/main/java/org/apache/maven/plugin/jdeps/consumers/JDepsConsumer.java?rev=1658054&view=auto ============================================================================== --- maven/plugins/trunk/maven-jdeps-plugin/src/main/java/org/apache/maven/plugin/jdeps/consumers/JDepsConsumer.java (added) +++ maven/plugins/trunk/maven-jdeps-plugin/src/main/java/org/apache/maven/plugin/jdeps/consumers/JDepsConsumer.java Sat Feb 7 12:45:54 2015 @@ -0,0 +1,60 @@ +package org.apache.maven.plugin.jdeps.consumers; + +/* + * 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.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.codehaus.plexus.util.cli.CommandLineUtils; +import org.codehaus.plexus.util.cli.StreamConsumer; + +/** + * Consumes the output of the jdeps tool + * + * @author Robert Scholte + * + */ +public class JDepsConsumer + extends CommandLineUtils.StringStreamConsumer + implements StreamConsumer +{ + + private static final Pattern JDKINTERNALAPI = Pattern.compile( "\\s+->\\s([a-z\\.]+)\\s+(\\S.*)" ); + + private Map<String, String> offendingPackages = new HashMap<String, String>(); + + public void consumeLine( String line ) + { + super.consumeLine( line ); + + Matcher matcher = JDKINTERNALAPI.matcher( line ); + if ( matcher.matches() ) + { + offendingPackages.put( matcher.group( 1 ), matcher.group( 2 ) ); + } + } + + public Map<String, String> getOffendingPackages() + { + return offendingPackages; + } +} Added: maven/plugins/trunk/maven-jdeps-plugin/src/test/java/org/apache/maven/plugin/jdeps/consumers/JDepsConsumerTest.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeps-plugin/src/test/java/org/apache/maven/plugin/jdeps/consumers/JDepsConsumerTest.java?rev=1658054&view=auto ============================================================================== --- maven/plugins/trunk/maven-jdeps-plugin/src/test/java/org/apache/maven/plugin/jdeps/consumers/JDepsConsumerTest.java (added) +++ maven/plugins/trunk/maven-jdeps-plugin/src/test/java/org/apache/maven/plugin/jdeps/consumers/JDepsConsumerTest.java Sat Feb 7 12:45:54 2015 @@ -0,0 +1,47 @@ +package org.apache.maven.plugin.jdeps.consumers; + +/* + * 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.junit.Assert.*; + +import org.apache.maven.plugin.jdeps.consumers.JDepsConsumer; +import org.junit.Test; + +public class JDepsConsumerTest +{ + + private JDepsConsumer consumer; + + @Test + public void testJDKInterAPI() + { + + consumer = new JDepsConsumer(); + consumer.consumeLine( "test-classes -> java.base" ); + consumer.consumeLine( " <unnamed> (test-classes)" ); + consumer.consumeLine( " -> java.io " ); + consumer.consumeLine( " -> java.lang " ); + consumer.consumeLine( " -> sun.misc JDK internal API (java.base)" ); + + assertEquals( 1, consumer.getOffendingPackages().size() ); + assertEquals( "JDK internal API (java.base)", consumer.getOffendingPackages().get( "sun.misc" ) ); + } + +}