Thanks, Anders.

How do I log into your JIRA?  Account creation indicates I need an admin.

Cheers,
Brian



On Fri, Jan 17, 2014 at 2:58 PM, Anders Hammar <[email protected]> wrote:

> Please create a JIRA ticket (with patch) as explained here:
> http://mojo.codehaus.org/animal-sniffer-maven-plugin/issue-tracking.html
>
> Also, mixing two "fixes" isn't a good thing. You should create two
> separate tickets. And then two separate patches. The tickets are used as
> release notes when releasing, so mixing fixes will make it difficult for
> people to see what has changed.
>
> /Anders
>
>
> On Thu, Jan 16, 2014 at 11:26 PM, B. K. Oxley (binkley) <
> [email protected]> wrote:
>
>> Hi,
>>
>> I have two changes for the animal sniffer maven plugin.  Apologies for
>> mixing them, but while fixing one the other seemed obvious.
>>
>> A. Create a "test-check" goal for checking test classes.  I recently
>> broke another project with a commit of a test class containing a JDK7 API
>> call; the project should compile with JDK5.  This was my motivation for
>> looking at the animal sniffer plugin.
>>
>> B. Update the source directory for checking to include locations other
>> than ${basedir}/src/*/java.  When using other maven plugins, e.g. the build
>> helper plugin, or generated code there may be additional source roots.
>>
>> I do not know the procedure for contributing, so I append output from
>> "svn diff src" below.  It would be helpful for me if these changes could
>> appear in version 1.10; for now I'm commenting out "test-check" in my
>> project pom.
>>
>> Please do not hesitate to contact me with any questions or concerns.  I
>> am happy to sign copyright documents, if required.
>>
>>
>> Regards,
>> --binkley
>>
>>
>> Index:
>> src/main/java/org/codehaus/mojo/animal_sniffer/maven/CheckSignatureMojo.java
>> ===================================================================
>> ---
>> src/main/java/org/codehaus/mojo/animal_sniffer/maven/CheckSignatureMojo.java 
>> (revision
>> 19274)
>> +++
>> src/main/java/org/codehaus/mojo/animal_sniffer/maven/CheckSignatureMojo.java 
>> (working
>> copy)
>> @@ -25,25 +25,8 @@
>>   *
>>   */
>>
>> -import org.apache.maven.artifact.factory.ArtifactFactory;
>> -import org.apache.maven.artifact.repository.ArtifactRepository;
>> -import
>> org.apache.maven.artifact.resolver.AbstractArtifactResolutionException;
>> -import org.apache.maven.artifact.resolver.ArtifactResolver;
>> -import org.apache.maven.plugin.AbstractMojo;
>> -import org.apache.maven.plugin.MojoExecutionException;
>> -import org.apache.maven.plugin.MojoFailureException;
>> -import org.apache.maven.project.MavenProject;
>> -import org.codehaus.mojo.animal_sniffer.ClassFileVisitor;
>> -import org.codehaus.mojo.animal_sniffer.ClassListBuilder;
>> -import org.codehaus.mojo.animal_sniffer.SignatureChecker;
>> -
>>  import java.io.File;
>> -import java.io.FileInputStream;
>> -import java.io.IOException;
>> -import java.util.Collections;
>> -import java.util.Iterator;
>>  import java.util.List;
>> -import java.util.Set;
>>
>>  /**
>>   * Checks the classes compiled by this module.
>> @@ -54,9 +37,16 @@
>>   * @goal check
>>   * @threadSafe
>>   */
>> -public class CheckSignatureMojo
>> -    extends AbstractMojo
>> +public class CheckSignatureMojo extends AbstractCheckSignatureMojo
>>  {
>> +    /**
>> +     * The directories for source files (including added by other
>> plugins).
>> +     *
>> +     * @parameter expression="${project.compileSourceRoots}"
>> +     * @required
>> +     * @readonly
>> +     */
>> +    protected List sourceRoots;
>>
>>      /**
>>       * Project classpath.
>> @@ -76,143 +66,15 @@
>>       */
>>      protected File outputDirectory;
>>
>> -    /**
>> -     * Signature module to use.
>> -     *
>> -     * @required
>> -     * @parameter
>> -     */
>> -    protected Signature signature;
>> -
>> -    /**
>> -     * Class names to ignore signatures for (wildcards accepted).
>> -     *
>> -     * @parameter
>> -     */
>> -    protected String[] ignores;
>> -
>> -    /**
>> -     * Should dependencies be ignored.
>> -     *
>> -     * @parameter default-value="true"
>> -     */
>> -    protected boolean ignoreDependencies;
>> -
>> -    /**
>> -     * Should signature checking be skipped?
>> -     *
>> -     * @parameter default-value="false"
>> expression="${animal.sniffer.skip}"
>> -     */
>> -    protected boolean skip;
>> -
>> -    /**
>> -     * @component
>> -     * @readonly
>> -     */
>> -    protected ArtifactResolver resolver;
>> -
>> -    /**
>> -     * @parameter expression="${project}"
>> -     * @readonly
>> -     */
>> -    protected MavenProject project;
>> -
>> -    /**
>> -     * @parameter expression="${localRepository}"
>> -     * @readonly
>> -     */
>> -    protected ArtifactRepository localRepository;
>> -
>> -    /**
>> -     * @component
>> -     * @readonly
>> -     */
>> -    protected ArtifactFactory artifactFactory;
>> -
>> -    public void execute()
>> -        throws MojoExecutionException, MojoFailureException
>> -    {
>> -        if ( skip )
>> -        {
>> -            getLog().info( "Signature checking is skipped." );
>> -            return;
>> -        }
>> -
>> -        try
>> -        {
>> -            getLog().info( "Checking unresolved references to " +
>> signature );
>> -
>> -            org.apache.maven.artifact.Artifact a =
>> signature.createArtifact( artifactFactory );
>> -
>> -            resolver.resolve( a,
>> project.getRemoteArtifactRepositories(), localRepository );
>> -            // just check code from this module
>> -            final Set ignoredPackages = buildPackageList();
>> -
>> -            if ( ignores != null )
>> -            {
>> -                for ( int i = 0; i < ignores.length; i++ )
>> -                {
>> -                    String ignore = ignores[i];
>> -                    if ( ignore == null )
>> -                    {
>> -                        continue;
>> -                    }
>> -                    ignoredPackages.add( ignore.replace( '.', '/' ) );
>> -                }
>> -            }
>> -
>> -            if ( getLog().isDebugEnabled() )
>> -            {
>> -                getLog().debug( ignoredPackages.toString() );
>> -            }
>> -
>> -            final SignatureChecker signatureChecker =
>> -                new SignatureChecker( new FileInputStream( a.getFile()
>> ), ignoredPackages,
>> -                                      new MavenLogger( getLog() ) );
>> -            signatureChecker.setCheckJars( false ); // don't want to
>> decend into jar files that have been copied to
>> -                                                    // the output
>> directory as resources.
>> -            signatureChecker.setSourcePath( Collections.singletonList(
>> new File( project.getBuild().getSourceDirectory() ) ) );
>> -            signatureChecker.process( outputDirectory );
>> -
>> -            if ( signatureChecker.isSignatureBroken() )
>> -            {
>> -                throw new MojoFailureException(
>> -                    "Signature errors found. Verify them and put
>> @IgnoreJRERequirement on them." );
>> -            }
>> -        }
>> -        catch ( IOException e )
>> -        {
>> -            throw new MojoExecutionException( "Failed to check
>> signatures", e );
>> -        }
>> -        catch ( AbstractArtifactResolutionException e )
>> -        {
>> -            throw new MojoExecutionException( "Failed to obtain
>> signature: " + signature, e );
>> -        }
>> +    public List getSourceRoots() {
>> +        return sourceRoots;
>>      }
>>
>> -    /**
>> -     * List of packages defined in the application.
>> -     */
>> -    private Set buildPackageList()
>> -        throws IOException
>> -    {
>> -        ClassListBuilder plb = new ClassListBuilder( new MavenLogger(
>> getLog() ) );
>> -        apply( plb );
>> -        return plb.getPackages();
>> +    protected List getClasspathElements() {
>> +        return classpathElements;
>>      }
>>
>> -    private void apply( ClassFileVisitor v )
>> -        throws IOException
>> -    {
>> -        v.process( outputDirectory );
>> -        if ( ignoreDependencies )
>> -        {
>> -            Iterator itr = classpathElements.iterator();
>> -            while ( itr.hasNext() )
>> -            {
>> -                String path = (String) itr.next();
>> -                v.process( new File( path ) );
>> -            }
>> -        }
>> +    protected File getOutputDirectory() {
>> +        return outputDirectory;
>>      }
>>  }
>> Index:
>> src/main/java/org/codehaus/mojo/animal_sniffer/maven/TestCheckSignatureMojo.java
>> ===================================================================
>> ---
>> src/main/java/org/codehaus/mojo/animal_sniffer/maven/TestCheckSignatureMojo.java
>>  (revision
>> 0)
>> +++
>> src/main/java/org/codehaus/mojo/animal_sniffer/maven/TestCheckSignatureMojo.java
>>  (working
>> copy)
>> @@ -0,0 +1,107 @@
>> +/*
>> + * This is free and unencumbered software released into the public
>> domain.
>> + *
>> + * Anyone is free to copy, modify, publish, use, compile, sell, or
>> + * distribute this software, either in source code form or as a compiled
>> + * binary, for any purpose, commercial or non-commercial, and by any
>> + * means.
>> + *
>> + * In jurisdictions that recognize copyright laws, the author or authors
>> + * of this software dedicate any and all copyright interest in the
>> + * software to the public domain. We make this dedication for the benefit
>> + * of the public at large and to the detriment of our heirs and
>> + * successors. We intend this dedication to be an overt act of
>> + * relinquishment in perpetuity of all present and future rights to this
>> + * software under copyright law.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
>> + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
>> + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
>> + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
>> + * OTHER DEALINGS IN THE SOFTWARE.
>> + *
>> + * For more information, please refer to <http://unlicense.org/>.
>> + */
>> +
>> +package org.codehaus.mojo.animal_sniffer.maven;
>> +
>> +/*
>> + * The MIT License
>> + *
>> + * Copyright (c) 2008 Kohsuke Kawaguchi and codehaus.org.
>> + *
>> + * Permission is hereby granted, free of charge, to any person obtaining
>> a copy
>> + * of this software and associated documentation files (the "Software"),
>> to deal
>> + * in the Software without restriction, including without limitation the
>> rights
>> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or
>> sell
>> + * copies of the Software, and to permit persons to whom the Software is
>> + * furnished to do so, subject to the following conditions:
>> + *
>> + * The above copyright notice and this permission notice shall be
>> included in
>> + * all copies or substantial portions of the Software.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>> EXPRESS OR
>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>> MERCHANTABILITY,
>> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
>> SHALL THE
>> + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
>> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
>> ARISING FROM,
>> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>> DEALINGS IN
>> + * THE SOFTWARE.
>> + *
>> + */
>> +
>> +import java.io.File;
>> +import java.util.List;
>> +
>> +/**
>> + * Checks the classes compiled by this module.
>> + *
>> + * @author Kohsuke Kawaguchi
>> + * @phase process-test-classes
>> + * @requiresDependencyResolution test
>> + * @goal test-check
>> + * @threadSafe
>> + */
>> +public class TestCheckSignatureMojo extends AbstractCheckSignatureMojo
>> +{
>> +    /**
>> +     * The directories for source files (including added by other
>> plugins).
>> +     *
>> +     * @parameter expression="${project.testSourceRoots}"
>> +     * @required
>> +     * @readonly
>> +     */
>> +    protected List sourceRoots;
>> +
>> +    /**
>> +     * Project classpath.
>> +     *
>> +     * @parameter expression="${project.testClasspathElements}"
>> +     * @required
>> +     * @readonly
>> +     */
>> +    protected List classpathElements;
>> +
>> +    /**
>> +     * The directory for compiled classes.
>> +     *
>> +     * @parameter expression="${project.build.testOutputDirectory}"
>> +     * @required
>> +     * @readonly
>> +     */
>> +    protected File outputDirectory;
>> +
>> +    public List getSourceRoots() {
>> +        return sourceRoots;
>> +    }
>> +
>> +    protected List getClasspathElements() {
>> +        return classpathElements;
>> +    }
>> +
>> +    protected File getOutputDirectory() {
>> +        return outputDirectory;
>> +    }
>> +}
>>
>> Property changes on:
>> src/main/java/org/codehaus/mojo/animal_sniffer/maven/TestCheckSignatureMojo.java
>> ___________________________________________________________________
>> Added: svn:executable
>> ## -0,0 +1 ##
>> +*
>> \ No newline at end of property
>>
>>
>>
>> ---------- Forwarded message ----------
>> From: Kohsuke Kawaguchi <[email protected]>
>> Date: Wed, Jan 15, 2014 at 2:21 AM
>> Subject: Re: animal sniffer for maven test classes
>> To: "B. K. Oxley (binkley)" <[email protected]>
>>
>>
>> Thank you!
>>
>> Yes, we'd need to move most of the logic into an abstract base class,
>> then create another mojo that extends from it that binds itself to the
>> correct lifecycle phase and the classpath. This is a common pattern that
>> can be seen in many Maven plugins, such as jar plugin and javadoc plugin.
>>
>> The project is maintained in the codehaus mojo project now, so you'd want
>> to forward this e-mail there. What you are proposing sounds sensible to me,
>> so I don't expect a problem integrating it.
>>
>>
>>
>> On 01/13/2014 02:27 PM, B. K. Oxley (binkley) wrote:
>>
>>> Howdy!
>>>
>>> Apologies if you are the wrong guy for this question; your name was on
>>> the 1.9
>>> release of animal sniffer, and I trust your code.  :)
>>>
>>> I've had difficulty getting the maven animal sniffer maven plugin to
>>> check test
>>> classes.  I looked through the check mojo and could point the output
>>> directory
>>> at target/test-classes with configuration, but then couldn't change the
>>> classpath elements to use test scope.  Result is animal sniffer doesn't
>>> know
>>> what to do about test-only dependencies (e.g., junit & friends).
>>>
>>> I'm willing to contribute a patch to animal sniffer for a test-check
>>> mojo.
>>>
>>> Some questions:
>>>
>>> 1. Who's the right person to approach on this?  I don't want to bug you
>>> if you
>>> don't work on animal sniffer any more.
>>> 2. What's the right way to check test classes in a maven project?  I'm
>>> obviously
>>> doing it the wrong way.
>>> 3. If a new mojo is needed, or a change to the existing mojo, how do I
>>> contribute it?  (Answer to question #1 relates.)
>>>
>>>
>>> Cheers,
>>> --binkley
>>>
>>>
>>
>> --
>> Kohsuke Kawaguchi                          http://kohsuke.org/
>>
>>
>>
>>
>>
>

Reply via email to