Animal Sniffer
Animal Sniffer provides tools to assist verifying that classes compiled with a newer JDK/API are compatible with an older JDK/API.
CLI overview
The CLI has the following functionality:
- Display the target class version of classes to help you track down the offending jar file when you see
UnsupportedClassVersionError
.
API overview
Animal-sniffer also provides an API for verifying and compiling API signatures. This API is used by the ANT tasks, the maven enforcer rule, and the Maven plugin. If these tools are not sufficient to your needs, then the two entry points to the API are:
- SignatureChecker is used to check classes against a specific signature.
- SignatureBuilder is used to build signatures from a collection of classes.
Usage
General instructions on how to use the Animal Sniffer API can be found on the usage page. Some more specific use cases are described in the examples given below. Last but not least, users occasionally contribute additional examples, tips or errata to the animal-sniffer's wiki page.
In case you still have questions regarding the plugin's usage, please have a look at the FAQ and feel free to contact the user mailing list. The posts to the mailing list are archived and could already contain the answer to your question as part of an older thread. Hence, it is also worth browsing/searching the mail archive.
If you feel like animal-sniffer is missing a feature or has a defect, you can fill a feature request or bug report in our issue tracker. When creating a new issue, please provide a comprehensive description of your concern. Especially for fixing bugs it is crucial that the developers can reproduce your problem. For this reason, entire debug logs, POMs or most preferably little demo projects attached to the issue are very much appreciated. Of course, patches are welcome, too. Contributors can check out the project from our source repository and will find supplementary information in the guide to helping with Maven.
Examples
This CLI tool can accept any number of:
- Class files
- Jar files
- Directories
When directories are given, they are recursively scanned for class files and jar files. When jar files are given, class files in it is examined.
The tool produces output like the following, so use the grep command to filter out the list:
% java -jar animal-sniffer-1.24.jar tmp 50.0 tmp/streambuffer-0.7.jar:com/sun/xml/stream/buffer/AbstractCreator.class 50.0 tmp/streambuffer-0.7.jar:com/sun/xml/stream/buffer/AbstractCreatorProcessor.class 50.0 tmp/streambuffer-0.7.jar:com/sun/xml/stream/buffer/AbstractProcessor.class 50.0 tmp/streambuffer-0.7.jar:com/sun/xml/stream/buffer/AttributesHolder.class 50.0 tmp/streambuffer-0.7.jar:com/sun/xml/stream/buffer/FragmentedArray.class 50.0 tmp/streambuffer-0.7.jar:com/sun/xml/stream/buffer/MutableXMLStreamBuffer.class 50.0 tmp/streambuffer-0.7.jar:com/sun/xml/stream/buffer/XMLStreamBuffer.class 50.0 tmp/streambuffer-0.7.jar:com/sun/xml/stream/buffer/XMLStreamBufferException.class