diff --git a/src/main/org/apache/ant/compress/conditions/HasGroupId.java b/src/main/org/apache/ant/compress/conditions/HasGroupId.java
index 8a513cf..220f59d 100644
--- a/src/main/org/apache/ant/compress/conditions/HasGroupId.java
+++ b/src/main/org/apache/ant/compress/conditions/HasGroupId.java
@@ -60,6 +60,7 @@
         }
     }
 
+    @Override
     public boolean eval() throws BuildException {
         validate();
         int actual = ccResource != null
diff --git a/src/main/org/apache/ant/compress/conditions/HasGroupName.java b/src/main/org/apache/ant/compress/conditions/HasGroupName.java
index b670ba5..7d6641b 100644
--- a/src/main/org/apache/ant/compress/conditions/HasGroupName.java
+++ b/src/main/org/apache/ant/compress/conditions/HasGroupName.java
@@ -59,6 +59,7 @@
         }
     }
 
+    @Override
     public boolean eval() throws BuildException {
         validate();
         String actual = ccResource != null
diff --git a/src/main/org/apache/ant/compress/conditions/HasMode.java b/src/main/org/apache/ant/compress/conditions/HasMode.java
index 57f4903..637e1ad 100644
--- a/src/main/org/apache/ant/compress/conditions/HasMode.java
+++ b/src/main/org/apache/ant/compress/conditions/HasMode.java
@@ -52,6 +52,7 @@
         }
     }
 
+    @Override
     public boolean eval() throws BuildException {
         validate();
         int actual = resource.getMode();
diff --git a/src/main/org/apache/ant/compress/conditions/HasUserId.java b/src/main/org/apache/ant/compress/conditions/HasUserId.java
index de3c1e0..dd6e418 100644
--- a/src/main/org/apache/ant/compress/conditions/HasUserId.java
+++ b/src/main/org/apache/ant/compress/conditions/HasUserId.java
@@ -60,6 +60,7 @@
         }
     }
 
+    @Override
     public boolean eval() throws BuildException {
         validate();
         int actual = ccResource != null
diff --git a/src/main/org/apache/ant/compress/conditions/HasUserName.java b/src/main/org/apache/ant/compress/conditions/HasUserName.java
index cc0d6e0..e474b9d 100644
--- a/src/main/org/apache/ant/compress/conditions/HasUserName.java
+++ b/src/main/org/apache/ant/compress/conditions/HasUserName.java
@@ -59,6 +59,7 @@
         }
     }
 
+    @Override
     public boolean eval() throws BuildException {
         validate();
         String actual = ccResource != null
diff --git a/src/main/org/apache/ant/compress/resources/ArFileSet.java b/src/main/org/apache/ant/compress/resources/ArFileSet.java
index ce9f3d3..282d9ce 100644
--- a/src/main/org/apache/ant/compress/resources/ArFileSet.java
+++ b/src/main/org/apache/ant/compress/resources/ArFileSet.java
@@ -69,6 +69,7 @@
      * Create a new scanner.
      * @return the created scanner.
      */
+    @Override
     protected ArchiveScanner newArchiveScanner() {
         return new CommonsCompressArchiveScanner(new ArStreamFactory(),
                                                  new CommonsCompressArchiveScanner.ResourceBuilder() {
@@ -79,6 +80,7 @@
             }, getSkipUnreadableEntries(), getProject());
     }
 
+    @Override
     protected CommonsCompressFileSet newFileSet(FileSet fs) {
         if (fs instanceof ArFileSet) {
             return new ArFileSet((ArFileSet) fs);
diff --git a/src/main/org/apache/ant/compress/resources/Archives.java b/src/main/org/apache/ant/compress/resources/Archives.java
index 0727538..27b85cc 100644
--- a/src/main/org/apache/ant/compress/resources/Archives.java
+++ b/src/main/org/apache/ant/compress/resources/Archives.java
@@ -94,6 +94,7 @@
     /**
      * Sums the sizes of nested archives.
      */
+    @Override
     public int size() {
         if (isReference()) {
             return ((Archives) getCheckedRef()).size();
@@ -109,6 +110,7 @@
     /**
      * Merges the nested collections.
      */
+    @Override
     public Iterator iterator() {
         if (isReference()) {
             return ((Archives) getCheckedRef()).iterator();
@@ -125,6 +127,7 @@
     /**
      * @return false
      */
+    @Override
     public boolean isFilesystemOnly() {
         if (isReference()) {
             return ((Archives) getCheckedRef()).isFilesystemOnly();
@@ -137,6 +140,7 @@
      * Overrides the base version.
      * @param r the Reference to set.
      */
+    @Override
     public void setRefid(Reference r) {
         if (zips.getResourceCollections().size() > 0
             || ars.getResourceCollections().size() > 0
@@ -152,6 +156,7 @@
      * well.
      * @return a cloned instance.
      */
+    @Override
     public Object clone() {
         try {
             Archives a = (Archives) super.clone();
@@ -210,6 +215,7 @@
      * @param p   the project to use to dereference the references.
      * @throws BuildException on error.
      */
+    @Override
     protected synchronized void dieOnCircularReference(Stack stk, Project p)
         throws BuildException {
         if (isChecked()) {
@@ -226,4 +232,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/src/main/org/apache/ant/compress/resources/ArjFileSet.java b/src/main/org/apache/ant/compress/resources/ArjFileSet.java
index 86027f6..ee12fe4 100644
--- a/src/main/org/apache/ant/compress/resources/ArjFileSet.java
+++ b/src/main/org/apache/ant/compress/resources/ArjFileSet.java
@@ -70,6 +70,7 @@
      * Create a new scanner.
      * @return the created scanner.
      */
+    @Override
     protected ArchiveScanner newArchiveScanner() {
         CommonsCompressArchiveScanner cs =
             new CommonsCompressArchiveScanner(new ArjStreamFactory(),
@@ -83,6 +84,7 @@
         return cs;
     }
 
+    @Override
     protected CommonsCompressFileSet newFileSet(FileSet fs) {
         if (fs instanceof ArjFileSet) {
             return new ArjFileSet((ArjFileSet) fs);
diff --git a/src/main/org/apache/ant/compress/resources/CommonsCompressArchiveResource.java b/src/main/org/apache/ant/compress/resources/CommonsCompressArchiveResource.java
index c8b8585..c71f3f3 100644
--- a/src/main/org/apache/ant/compress/resources/CommonsCompressArchiveResource.java
+++ b/src/main/org/apache/ant/compress/resources/CommonsCompressArchiveResource.java
@@ -107,6 +107,7 @@
      * Overrides the super version.
      * @param r the Reference to set.
      */
+    @Override
     public void setRefid(Reference r) {
         if (getEncoding() != null) {
             throw tooManyAttributes();
@@ -120,6 +121,7 @@
      * @throws IOException if the archive cannot be opened,
      *         or the entry cannot be read.
      */
+    @Override
     public InputStream getInputStream() throws IOException {
         if (isReference()) {
             return ((Resource) getCheckedRef()).getInputStream();
@@ -145,6 +147,7 @@
      * @throws UnsupportedOperationException if OutputStreams are not
      *         supported for this Resource type.
      */
+    @Override
     public OutputStream getOutputStream() throws IOException {
         if (isReference()) {
             return ((Resource) getCheckedRef()).getOutputStream();
@@ -180,6 +183,7 @@
     /**
      * fetches information from the named entry inside the archive.
      */
+    @Override
     protected void fetchEntry() {
         ArchiveInputStream i = null;
         try {
diff --git a/src/main/org/apache/ant/compress/resources/CommonsCompressArchiveScanner.java b/src/main/org/apache/ant/compress/resources/CommonsCompressArchiveScanner.java
index 8595798..52002ca 100644
--- a/src/main/org/apache/ant/compress/resources/CommonsCompressArchiveScanner.java
+++ b/src/main/org/apache/ant/compress/resources/CommonsCompressArchiveScanner.java
@@ -84,6 +84,7 @@
      * resources found inside the archive that matched all include
      * patterns and didn't match any exclude patterns.
      */
+    @Override
     protected void fillMapsFromArchive(Resource src, String encoding,
                                        Map fileEntries, Map matchFileEntries,
                                        Map dirEntries, Map matchDirEntries) {
@@ -148,4 +149,4 @@
         Resource buildResource(Resource archive, String encoding,
                                ArchiveEntry entry);
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/org/apache/ant/compress/resources/CommonsCompressCompressorResource.java b/src/main/org/apache/ant/compress/resources/CommonsCompressCompressorResource.java
index 6cc6f68..5967cc1 100644
--- a/src/main/org/apache/ant/compress/resources/CommonsCompressCompressorResource.java
+++ b/src/main/org/apache/ant/compress/resources/CommonsCompressCompressorResource.java
@@ -103,6 +103,7 @@
      * @return the wrapped stream.
      * @throws IOException if there is a problem.
      */
+    @Override
     protected final InputStream wrapStream(InputStream in) throws IOException {
         if (factory instanceof CompressorWithConcatenatedStreamsFactory) {
             CompressorWithConcatenatedStreamsFactory f
@@ -120,6 +121,7 @@
      * @return the wrapped stream.
      * @throws IOException if there is a problem.
      */
+    @Override
     protected final OutputStream wrapStream(OutputStream out)
         throws IOException {
         return factory.getCompressorStream(new BufferedOutputStream(out));
@@ -129,6 +131,7 @@
      * Get the string representation of this Resource.
      * @return this Resource formatted as a String.
      */
+    @Override
     public String toString() {
         return name + " compressed " + super.toString();
     }
diff --git a/src/main/org/apache/ant/compress/resources/CpioFileSet.java b/src/main/org/apache/ant/compress/resources/CpioFileSet.java
index 901baa1..49f4c90 100644
--- a/src/main/org/apache/ant/compress/resources/CpioFileSet.java
+++ b/src/main/org/apache/ant/compress/resources/CpioFileSet.java
@@ -69,6 +69,7 @@
      * Create a new scanner.
      * @return the created scanner.
      */
+    @Override
     protected ArchiveScanner newArchiveScanner() {
         CommonsCompressArchiveScanner cs =
             new CommonsCompressArchiveScanner(new CpioStreamFactory(),
@@ -82,6 +83,7 @@
         return cs;
     }
 
+    @Override
     protected CommonsCompressFileSet newFileSet(FileSet fs) {
         if (fs instanceof CpioFileSet) {
             return new CpioFileSet((CpioFileSet) fs);
diff --git a/src/main/org/apache/ant/compress/resources/DevZeroResource.java b/src/main/org/apache/ant/compress/resources/DevZeroResource.java
index 726d5c2..1b0240d 100644
--- a/src/main/org/apache/ant/compress/resources/DevZeroResource.java
+++ b/src/main/org/apache/ant/compress/resources/DevZeroResource.java
@@ -31,6 +31,7 @@
  */
 public class DevZeroResource extends Resource {
 
+    @Override
     public InputStream getInputStream() {
         final long size = getSize();
         return new InputStream() {
diff --git a/src/main/org/apache/ant/compress/resources/DumpFileSet.java b/src/main/org/apache/ant/compress/resources/DumpFileSet.java
index a5bc520..134a501 100644
--- a/src/main/org/apache/ant/compress/resources/DumpFileSet.java
+++ b/src/main/org/apache/ant/compress/resources/DumpFileSet.java
@@ -70,6 +70,7 @@
      * Create a new scanner.
      * @return the created scanner.
      */
+    @Override
     protected ArchiveScanner newArchiveScanner() {
         CommonsCompressArchiveScanner cs =
             new CommonsCompressArchiveScanner(new DumpStreamFactory(),
@@ -83,6 +84,7 @@
         return cs;
     }
 
+    @Override
     protected CommonsCompressFileSet newFileSet(FileSet fs) {
         if (fs instanceof DumpFileSet) {
             return new DumpFileSet((DumpFileSet) fs);
diff --git a/src/main/org/apache/ant/compress/resources/SevenZFileSet.java b/src/main/org/apache/ant/compress/resources/SevenZFileSet.java
index 9b5f44d..c0795af 100644
--- a/src/main/org/apache/ant/compress/resources/SevenZFileSet.java
+++ b/src/main/org/apache/ant/compress/resources/SevenZFileSet.java
@@ -65,10 +65,12 @@
      * Return a new archive scanner based on this one.
      * @return a new SevenZScanner with the same encoding as this one.
      */
+    @Override
     protected ArchiveScanner newArchiveScanner() {
         return new SevenZScanner(getSkipUnreadableEntries(), getProject());
     }
 
+    @Override
     protected CommonsCompressFileSet newFileSet(FileSet fs) {
         if (fs instanceof SevenZFileSet) {
             return new SevenZFileSet((SevenZFileSet) fs);
diff --git a/src/main/org/apache/ant/compress/resources/SevenZResource.java b/src/main/org/apache/ant/compress/resources/SevenZResource.java
index 516d1aa..db491a9 100644
--- a/src/main/org/apache/ant/compress/resources/SevenZResource.java
+++ b/src/main/org/apache/ant/compress/resources/SevenZResource.java
@@ -104,6 +104,7 @@
      * @throws IOException if the sevenz file cannot be opened,
      *         or the entry cannot be read.
      */
+    @Override
     public InputStream getInputStream() throws IOException {
         if (isReference()) {
             return ((Resource) getCheckedRef()).getInputStream();
@@ -155,6 +156,7 @@
     /**
      * fetches information from the named entry inside the archive.
      */
+    @Override
     protected void fetchEntry() {
         File f = getSevenZFile();
         if (f == null) {
@@ -188,6 +190,7 @@
         }
     }
 
+    @Override
     protected void setEntry(ArchiveEntry e) {
         super.setEntry(e);
         if (e != null) {
diff --git a/src/main/org/apache/ant/compress/resources/SevenZScanner.java b/src/main/org/apache/ant/compress/resources/SevenZScanner.java
index 4ec677a..1f73f20 100644
--- a/src/main/org/apache/ant/compress/resources/SevenZScanner.java
+++ b/src/main/org/apache/ant/compress/resources/SevenZScanner.java
@@ -73,6 +73,7 @@
      * resources found inside the archive that matched all include
      * patterns and didn't match any exclude patterns.
      */
+    @Override
     protected void fillMapsFromArchive(Resource src, String encoding,
                                        Map fileEntries, Map matchFileEntries,
                                        Map dirEntries, Map matchDirEntries) {
diff --git a/src/main/org/apache/ant/compress/resources/TarFileSet.java b/src/main/org/apache/ant/compress/resources/TarFileSet.java
index 0c3dae7..a5b2439 100644
--- a/src/main/org/apache/ant/compress/resources/TarFileSet.java
+++ b/src/main/org/apache/ant/compress/resources/TarFileSet.java
@@ -134,6 +134,7 @@
      * Create a new scanner.
      * @return the created scanner.
      */
+    @Override
     protected ArchiveScanner newArchiveScanner() {
         CommonsCompressArchiveScanner cs =
             new CommonsCompressArchiveScanner(new TarStreamFactory(),
@@ -156,6 +157,7 @@
      * @param r the <code>Reference</code> to use.
      * @throws BuildException on error
      */
+    @Override
     public void setRefid(Reference r) throws BuildException {
         if (userNameSet || groupNameSet) {
             throw tooManyAttributes();
@@ -169,6 +171,7 @@
      * specific attributes.
      * @param zfs the archive fileset to configure.
      */
+    @Override
     protected void configureFileSet(ArchiveFileSet zfs) {
         super.configureFileSet(zfs);
         if (zfs instanceof TarFileSet) {
@@ -178,6 +181,7 @@
         }
     }
 
+    @Override
     protected CommonsCompressFileSet newFileSet(FileSet fs) {
         if (fs instanceof TarFileSet) {
             return new TarFileSet((TarFileSet) fs);
diff --git a/src/main/org/apache/ant/compress/resources/TarResource.java b/src/main/org/apache/ant/compress/resources/TarResource.java
index b1f0acf..cfd716a 100644
--- a/src/main/org/apache/ant/compress/resources/TarResource.java
+++ b/src/main/org/apache/ant/compress/resources/TarResource.java
@@ -109,6 +109,7 @@
         return groupName;
     }
 
+    @Override
     protected void setEntry(ArchiveEntry e) {
         super.setEntry(e);
         if (e != null) {
diff --git a/src/main/org/apache/ant/compress/resources/ZipFileSet.java b/src/main/org/apache/ant/compress/resources/ZipFileSet.java
index 3f0df20..bcdc216 100644
--- a/src/main/org/apache/ant/compress/resources/ZipFileSet.java
+++ b/src/main/org/apache/ant/compress/resources/ZipFileSet.java
@@ -64,12 +64,14 @@
      * Return a new archive scanner based on this one.
      * @return a new ZipScanner with the same encoding as this one.
      */
+    @Override
     protected ArchiveScanner newArchiveScanner() {
         ZipScanner zs = new ZipScanner(getSkipUnreadableEntries(), getProject());
         zs.setEncoding(getEncoding());
         return zs;
     }
 
+    @Override
     protected CommonsCompressFileSet newFileSet(FileSet fs) {
         if (fs instanceof ZipFileSet) {
             return new ZipFileSet((ZipFileSet) fs);
diff --git a/src/main/org/apache/ant/compress/resources/ZipResource.java b/src/main/org/apache/ant/compress/resources/ZipResource.java
index e9cf764..e54169a 100644
--- a/src/main/org/apache/ant/compress/resources/ZipResource.java
+++ b/src/main/org/apache/ant/compress/resources/ZipResource.java
@@ -107,6 +107,7 @@
      * @throws IOException if the zip file cannot be opened,
      *         or the entry cannot be read.
      */
+    @Override
     public InputStream getInputStream() throws IOException {
         if (isReference()) {
             return ((Resource) getCheckedRef()).getInputStream();
@@ -163,6 +164,7 @@
     /**
      * fetches information from the named entry inside the archive.
      */
+    @Override
     protected void fetchEntry() {
         File f = getZipfile();
         if (f == null) {
diff --git a/src/main/org/apache/ant/compress/resources/ZipScanner.java b/src/main/org/apache/ant/compress/resources/ZipScanner.java
index 8d7653a..d194f36 100644
--- a/src/main/org/apache/ant/compress/resources/ZipScanner.java
+++ b/src/main/org/apache/ant/compress/resources/ZipScanner.java
@@ -72,6 +72,7 @@
      * resources found inside the archive that matched all include
      * patterns and didn't match any exclude patterns.
      */
+    @Override
     protected void fillMapsFromArchive(Resource src, String encoding,
                                        Map fileEntries, Map matchFileEntries,
                                        Map dirEntries, Map matchDirEntries) {
@@ -122,4 +123,4 @@
             ZipFile.closeQuietly(zf);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/org/apache/ant/compress/taskdefs/Ar.java b/src/main/org/apache/ant/compress/taskdefs/Ar.java
index 397e2c6..dbb57a4 100644
--- a/src/main/org/apache/ant/compress/taskdefs/Ar.java
+++ b/src/main/org/apache/ant/compress/taskdefs/Ar.java
@@ -101,6 +101,7 @@
             });
     }
 
+    @Override
     public void setFilesOnly(boolean b) {
         if (!b) {
             throw new BuildException(NO_DIRS_MESSAGE);
@@ -145,4 +146,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java b/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
index afb8ea3..c5bf808 100644
--- a/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
+++ b/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
@@ -271,6 +271,7 @@
         emptyBehavior = we;
     }
 
+    @Override
     public void execute() {
         validate();
         final Resource targetArchive = getDest();
diff --git a/src/main/org/apache/ant/compress/taskdefs/ExpandBase.java b/src/main/org/apache/ant/compress/taskdefs/ExpandBase.java
index 4de2b11..0eef517 100644
--- a/src/main/org/apache/ant/compress/taskdefs/ExpandBase.java
+++ b/src/main/org/apache/ant/compress/taskdefs/ExpandBase.java
@@ -98,6 +98,7 @@
     }
 
     /** {@inheritDoc} */
+    @Override
     protected void expandFile(FileUtils fileUtils, File srcF, File dir) {
         if (!srcF.exists()) {
             throw new BuildException("Unable to expand " + srcF
@@ -125,6 +126,7 @@
     }
 
     /** {@inheritDoc} */
+    @Override
     protected void expandResource(Resource srcR, File dir) {
         if (!srcR.isExists()) {
             throw new BuildException("Unable to expand " + srcR.getName()
diff --git a/src/main/org/apache/ant/compress/taskdefs/Pack200Normalize.java b/src/main/org/apache/ant/compress/taskdefs/Pack200Normalize.java
index c2b58d9..5eb08da 100644
--- a/src/main/org/apache/ant/compress/taskdefs/Pack200Normalize.java
+++ b/src/main/org/apache/ant/compress/taskdefs/Pack200Normalize.java
@@ -81,6 +81,7 @@
         properties.put(prop.getKey(), prop.getValue());
     }
 
+    @Override
     public void execute() {
         validate();
         if (isOutOfDate()) {
@@ -132,4 +133,4 @@
                                      + src, ex);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/org/apache/ant/compress/taskdefs/PackBase.java b/src/main/org/apache/ant/compress/taskdefs/PackBase.java
index 9521831..9c5d6de 100644
--- a/src/main/org/apache/ant/compress/taskdefs/PackBase.java
+++ b/src/main/org/apache/ant/compress/taskdefs/PackBase.java
@@ -187,6 +187,7 @@
      * validate, then hand off to the subclass
      * @throws BuildException on error
      */
+    @Override
     public void execute() throws BuildException {
         validate();
 
diff --git a/src/main/org/apache/ant/compress/taskdefs/Un7z.java b/src/main/org/apache/ant/compress/taskdefs/Un7z.java
index d21e8be..c6df0a2 100644
--- a/src/main/org/apache/ant/compress/taskdefs/Un7z.java
+++ b/src/main/org/apache/ant/compress/taskdefs/Un7z.java
@@ -44,6 +44,7 @@
     }
 
     // overridden in order to take advantage of SevenzFile
+    @Override
     protected void expandFile(FileUtils fileUtils, File srcF, File dir) {
         if (!srcF.exists()) {
             throw new BuildException("Unable to expand " + srcF
diff --git a/src/main/org/apache/ant/compress/taskdefs/Unarj.java b/src/main/org/apache/ant/compress/taskdefs/Unarj.java
index 4f6b69e..139b67f 100644
--- a/src/main/org/apache/ant/compress/taskdefs/Unarj.java
+++ b/src/main/org/apache/ant/compress/taskdefs/Unarj.java
@@ -33,6 +33,7 @@
      * Set the file-name encoding for this archive, defaults to the
      * native encoding.
      */
+    @Override
     public void setEncoding(String encoding) {
         internalSetEncoding(encoding);
     }
diff --git a/src/main/org/apache/ant/compress/taskdefs/Uncpio.java b/src/main/org/apache/ant/compress/taskdefs/Uncpio.java
index d7177da..e462b7d 100644
--- a/src/main/org/apache/ant/compress/taskdefs/Uncpio.java
+++ b/src/main/org/apache/ant/compress/taskdefs/Uncpio.java
@@ -33,6 +33,7 @@
      * encoding.
      * @since Apache Compress Antlib 1.3
      */
+    @Override
     public void setEncoding(String encoding) {
         internalSetEncoding(encoding);
     }
diff --git a/src/main/org/apache/ant/compress/taskdefs/Undump.java b/src/main/org/apache/ant/compress/taskdefs/Undump.java
index e5fec5d..67fa262 100644
--- a/src/main/org/apache/ant/compress/taskdefs/Undump.java
+++ b/src/main/org/apache/ant/compress/taskdefs/Undump.java
@@ -34,6 +34,7 @@
      * native encoding.
      * @since Apache Compress Antlib 1.3
      */
+    @Override
     public void setEncoding(String encoding) {
         internalSetEncoding(encoding);
     }
diff --git a/src/main/org/apache/ant/compress/taskdefs/UnpackBase.java b/src/main/org/apache/ant/compress/taskdefs/UnpackBase.java
index 77c4107..6c77f43 100644
--- a/src/main/org/apache/ant/compress/taskdefs/UnpackBase.java
+++ b/src/main/org/apache/ant/compress/taskdefs/UnpackBase.java
@@ -90,6 +90,7 @@
     /**
      * Implement the uncompression.
      */
+    @Override
     protected void extract() {
         if (source.lastModified() > dest.lastModified()) {
             log("Expanding " + source.getAbsolutePath() + " to "
@@ -127,6 +128,7 @@
     /**
      * Yes, we can.
      */
+    @Override
     protected final boolean supportsNonFileResources() {
         return true;
     }
diff --git a/src/main/org/apache/ant/compress/taskdefs/Untar.java b/src/main/org/apache/ant/compress/taskdefs/Untar.java
index aa0ae82..9f4ce03 100644
--- a/src/main/org/apache/ant/compress/taskdefs/Untar.java
+++ b/src/main/org/apache/ant/compress/taskdefs/Untar.java
@@ -28,6 +28,7 @@
         super(new TarStreamFactory());
     }
 
+    @Override
     public void setEncoding(String encoding) {
         internalSetEncoding(encoding);
     }
diff --git a/src/main/org/apache/ant/compress/taskdefs/Unzip.java b/src/main/org/apache/ant/compress/taskdefs/Unzip.java
index c6ca2b7..aa47f15 100644
--- a/src/main/org/apache/ant/compress/taskdefs/Unzip.java
+++ b/src/main/org/apache/ant/compress/taskdefs/Unzip.java
@@ -44,6 +44,7 @@
         super(new ZipStreamFactory());
     }
 
+    @Override
     public void setEncoding(String encoding) {
         internalSetEncoding(encoding);
     }
diff --git a/src/main/org/apache/ant/compress/util/ArStreamFactory.java b/src/main/org/apache/ant/compress/util/ArStreamFactory.java
index 2ccc7ab..a7d7611 100644
--- a/src/main/org/apache/ant/compress/util/ArStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/ArStreamFactory.java
@@ -33,6 +33,7 @@
      * @param stream the stream to read from, should be buffered
      * @param encoding the encoding of the entry names, ignored
      */
+    @Override
     public ArchiveInputStream getArchiveStream(InputStream stream,
                                                String encoding)
         throws IOException {
@@ -43,10 +44,11 @@
      * @param stream the stream to write to, should be buffered
      * @param encoding the encoding of the entry names, ignored
      */
+    @Override
     public ArchiveOutputStream getArchiveStream(OutputStream stream,
                                                 String encoding)
         throws IOException {
         return new ArArchiveOutputStream(stream);
     }
 
-}
\ No newline at end of file
+}
diff --git a/src/main/org/apache/ant/compress/util/ArjStreamFactory.java b/src/main/org/apache/ant/compress/util/ArjStreamFactory.java
index 265f6a2..c613117 100644
--- a/src/main/org/apache/ant/compress/util/ArjStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/ArjStreamFactory.java
@@ -37,6 +37,7 @@
      * @param stream the stream to read from, should be buffered
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveInputStream getArchiveStream(InputStream stream,
                                                String encoding)
         throws IOException {
@@ -50,6 +51,7 @@
     /**
      * Not implemented.
      */
+    @Override
     public ArchiveOutputStream getArchiveStream(OutputStream stream,
                                                 String encoding)
         throws IOException {
diff --git a/src/main/org/apache/ant/compress/util/BZip2StreamFactory.java b/src/main/org/apache/ant/compress/util/BZip2StreamFactory.java
index 9066e5c..0ebdbbd 100644
--- a/src/main/org/apache/ant/compress/util/BZip2StreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/BZip2StreamFactory.java
@@ -35,6 +35,7 @@
     /**
      * @param stream the stream to read from, should be buffered
      */
+    @Override
     public CompressorInputStream getCompressorStream(InputStream stream)
         throws IOException {
         return getCompressorStream(stream, false);
@@ -48,6 +49,7 @@
      *                          stream
      * @since Apache Compress Antlib 1.2
      */
+    @Override
     public CompressorInputStream getCompressorStream(InputStream stream,
                                                      boolean decompressConcatenated)
         throws IOException {
@@ -58,8 +60,9 @@
     /**
      * @param stream the stream to write to, should be buffered
      */
+    @Override
     public CompressorOutputStream getCompressorStream(OutputStream stream)
         throws IOException {
         return new BZip2CompressorOutputStream(stream);
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/org/apache/ant/compress/util/CpioStreamFactory.java b/src/main/org/apache/ant/compress/util/CpioStreamFactory.java
index 2e990df..53bce53 100644
--- a/src/main/org/apache/ant/compress/util/CpioStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/CpioStreamFactory.java
@@ -33,6 +33,7 @@
      * @param stream the stream to read from, should be buffered
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveInputStream getArchiveStream(InputStream stream,
                                                String encoding)
         throws IOException {
@@ -43,6 +44,7 @@
      * @param stream the stream to write to, should be buffered
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveOutputStream getArchiveStream(OutputStream stream,
                                                 String encoding)
         throws IOException {
diff --git a/src/main/org/apache/ant/compress/util/DumpStreamFactory.java b/src/main/org/apache/ant/compress/util/DumpStreamFactory.java
index a6897f6..ff38ef3 100644
--- a/src/main/org/apache/ant/compress/util/DumpStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/DumpStreamFactory.java
@@ -37,6 +37,7 @@
      * @param stream the stream to read from, should be buffered
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveInputStream getArchiveStream(InputStream stream,
                                                String encoding)
         throws IOException {
@@ -50,6 +51,7 @@
     /**
      * Not implemented.
      */
+    @Override
     public ArchiveOutputStream getArchiveStream(OutputStream stream,
                                                 String encoding)
         throws IOException {
diff --git a/src/main/org/apache/ant/compress/util/GZipStreamFactory.java b/src/main/org/apache/ant/compress/util/GZipStreamFactory.java
index 992e416..ce1f91d 100644
--- a/src/main/org/apache/ant/compress/util/GZipStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/GZipStreamFactory.java
@@ -35,6 +35,7 @@
     /**
      * @param stream the stream to read from, should be buffered
      */
+    @Override
     public CompressorInputStream getCompressorStream(InputStream stream)
         throws IOException {
         return getCompressorStream(stream, false);
@@ -48,6 +49,7 @@
      *                          stream
      * @since Apache Compress Antlib 1.2
      */
+    @Override
     public CompressorInputStream getCompressorStream(InputStream stream,
                                                      boolean decompressConcatenated)
         throws IOException {
@@ -58,8 +60,9 @@
     /**
      * @param stream the stream to write to, should be buffered
      */
+    @Override
     public CompressorOutputStream getCompressorStream(OutputStream stream)
         throws IOException {
         return new GzipCompressorOutputStream(stream);
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/org/apache/ant/compress/util/LZMAStreamFactory.java b/src/main/org/apache/ant/compress/util/LZMAStreamFactory.java
index 2c9cede..b96cd9b 100644
--- a/src/main/org/apache/ant/compress/util/LZMAStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/LZMAStreamFactory.java
@@ -35,6 +35,7 @@
     /**
      * @param stream the stream to read from, should be buffered
      */
+    @Override
     public CompressorInputStream getCompressorStream(InputStream stream)
         throws IOException {
         return new LZMACompressorInputStream(stream);
@@ -43,6 +44,7 @@
     /**
      * Not implemented.
      */
+    @Override
     public CompressorOutputStream getCompressorStream(OutputStream stream)
         throws IOException {
         throw new UnsupportedOperationException();
diff --git a/src/main/org/apache/ant/compress/util/Pack200StreamFactory.java b/src/main/org/apache/ant/compress/util/Pack200StreamFactory.java
index 3c57ac7..b13c7e1 100644
--- a/src/main/org/apache/ant/compress/util/Pack200StreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/Pack200StreamFactory.java
@@ -39,6 +39,7 @@
     /**
      * @param stream the stream to read from, should be buffered
      */
+    @Override
     public CompressorInputStream getCompressorStream(InputStream stream)
         throws IOException {
         return new Pack200CompressorInputStream(stream);
@@ -47,6 +48,7 @@
     /**
      * @param stream the stream to write to, should be buffered
      */
+    @Override
     public CompressorOutputStream getCompressorStream(OutputStream stream)
         throws IOException {
         return new Pack200CompressorOutputStream(stream);
@@ -55,6 +57,7 @@
     /**
      * @param file the file to read from
      */
+    @Override
     public CompressorInputStream getCompressorInputStream(File file)
         throws IOException {
         return new Pack200CompressorInputStream(file);
@@ -63,9 +66,10 @@
     /**
      * @param file the file to write to
      */
+    @Override
     public CompressorOutputStream getCompressorOutputStream(File file)
         throws IOException {
         return
             getCompressorStream(new BufferedOutputStream(new FileOutputStream(file)));
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/org/apache/ant/compress/util/SevenZStreamFactory.java b/src/main/org/apache/ant/compress/util/SevenZStreamFactory.java
index fae06d2..b5cb41a 100644
--- a/src/main/org/apache/ant/compress/util/SevenZStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/SevenZStreamFactory.java
@@ -39,6 +39,7 @@
      * @param stream the stream to read from, should be buffered
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveInputStream getArchiveStream(InputStream stream,
                                                String encoding)
         throws IOException {
@@ -49,6 +50,7 @@
      * @param stream the stream to write to, should be buffered
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveOutputStream getArchiveStream(OutputStream stream,
                                                 String encoding)
         throws IOException {
@@ -59,6 +61,7 @@
      * @param file the file to read from
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveInputStream getArchiveInputStream(File file,
                                                     String encoding)
         throws IOException {
@@ -69,6 +72,7 @@
      * @param file the file to write to
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveOutputStream getArchiveOutputStream(File file,
                                                       String encoding)
         throws IOException {
diff --git a/src/main/org/apache/ant/compress/util/SnappyStreamFactory.java b/src/main/org/apache/ant/compress/util/SnappyStreamFactory.java
index 1b763d0..3e911bc 100644
--- a/src/main/org/apache/ant/compress/util/SnappyStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/SnappyStreamFactory.java
@@ -48,6 +48,7 @@
     /**
      * @param stream the stream to read from, should be buffered
      */
+    @Override
     public CompressorInputStream getCompressorStream(InputStream stream)
         throws IOException {
         return framed ? new FramedSnappyCompressorInputStream(stream)
@@ -57,6 +58,7 @@
     /**
      * Not implemented.
      */
+    @Override
     public CompressorOutputStream getCompressorStream(OutputStream stream)
         throws IOException {
         throw new UnsupportedOperationException();
diff --git a/src/main/org/apache/ant/compress/util/TarStreamFactory.java b/src/main/org/apache/ant/compress/util/TarStreamFactory.java
index 65ce02f..57859d4 100644
--- a/src/main/org/apache/ant/compress/util/TarStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/TarStreamFactory.java
@@ -33,6 +33,7 @@
      * @param stream the stream to read from, should be buffered
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveInputStream getArchiveStream(InputStream stream,
                                                String encoding)
         throws IOException {
@@ -43,9 +44,10 @@
      * @param stream the stream to write to, should be buffered
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveOutputStream getArchiveStream(OutputStream stream,
                                                 String encoding)
         throws IOException {
         return new TarArchiveOutputStream(stream, encoding);
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/org/apache/ant/compress/util/XZStreamFactory.java b/src/main/org/apache/ant/compress/util/XZStreamFactory.java
index 4c3d04e..e407aa3 100644
--- a/src/main/org/apache/ant/compress/util/XZStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/XZStreamFactory.java
@@ -36,6 +36,7 @@
     /**
      * @param stream the stream to read from, should be buffered
      */
+    @Override
     public CompressorInputStream getCompressorStream(InputStream stream)
         throws IOException {
         return getCompressorStream(stream, false);
@@ -48,6 +49,7 @@
      *                          input; if false, stop after the first
      *                          stream
      */
+    @Override
     public CompressorInputStream getCompressorStream(InputStream stream,
                                                      boolean decompressConcatenated)
         throws IOException {
@@ -57,8 +59,9 @@
     /**
      * @param stream the stream to write to, should be buffered
      */
+    @Override
     public CompressorOutputStream getCompressorStream(OutputStream stream)
         throws IOException {
         return new XZCompressorOutputStream(stream);
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/org/apache/ant/compress/util/ZStreamFactory.java b/src/main/org/apache/ant/compress/util/ZStreamFactory.java
index 53609de..0a32d4e 100644
--- a/src/main/org/apache/ant/compress/util/ZStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/ZStreamFactory.java
@@ -35,6 +35,7 @@
     /**
      * @param stream the stream to read from, should be buffered
      */
+    @Override
     public CompressorInputStream getCompressorStream(InputStream stream)
         throws IOException {
         return new ZCompressorInputStream(stream);
@@ -43,6 +44,7 @@
     /**
      * Not implemented.
      */
+    @Override
     public CompressorOutputStream getCompressorStream(OutputStream stream)
         throws IOException {
         throw new UnsupportedOperationException();
diff --git a/src/main/org/apache/ant/compress/util/ZipStreamFactory.java b/src/main/org/apache/ant/compress/util/ZipStreamFactory.java
index 3ccfd5e..fc1da5e 100644
--- a/src/main/org/apache/ant/compress/util/ZipStreamFactory.java
+++ b/src/main/org/apache/ant/compress/util/ZipStreamFactory.java
@@ -36,6 +36,7 @@
      * @param stream the stream to read from, should be buffered
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveInputStream getArchiveStream(InputStream stream,
                                                String encoding)
         throws IOException {
@@ -46,6 +47,7 @@
      * @param stream the stream to write to, should be buffered
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveOutputStream getArchiveStream(OutputStream stream,
                                                 String encoding)
         throws IOException {
@@ -58,6 +60,7 @@
      * @param file the file to read from
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveInputStream getArchiveInputStream(File file,
                                                     String encoding)
         throws IOException {
@@ -70,6 +73,7 @@
      * @param file the file to write to
      * @param encoding the encoding of the entry names
      */
+    @Override
     public ArchiveOutputStream getArchiveOutputStream(File file,
                                                       String encoding)
         throws IOException {
@@ -77,4 +81,4 @@
         o.setEncoding(encoding);
         return o;
     }
-}
\ No newline at end of file
+}
