diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
index e72404c..89993fd 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/LicenseMojo.java
@@ -360,23 +360,31 @@
 
         gatherProjectDependencies(project, dependencyLicenseMap, dependencyGavMap);
         for (Override override : overrides) {
-            String gav = override.getGav();
-            MavenProject dep = dependencyGavMap.get(gav);
-            if (dep == null) {
-                getLog().warn("Unused override dependency " + gav + "; ignoring...");
-                continue;
+
+            // Collect both <gav></gav> and <gavs><gav></gav><gav></gav>...</gavs>
+            List<String> gavs = override.getGavs();
+            if (override.getGav() != null) {
+                gavs.add(override.getGav());
             }
-            if (override.getUrl() != null) {
-                final List<Pair<String, String>> newLicense =
-                        Collections.singletonList(new ImmutablePair<>(override.getUrl(), override.getName()));
-                List<Pair<String, String>> prevLicense = dependencyLicenseMap.put(dep, newLicense);
-                warnUnlessFlag(dep, IGNORE_LICENSE_OVERRIDE, "license list for " + toGav(dep)
-                        + " changed with <override>; was: " + prevLicense + ", now: " + newLicense);
-            }
-            if (override.getNoticeUrl() != null) {
-                noticeOverrides.put(gav, override.getNoticeUrl());
-                warnUnlessFlag(dep, IGNORE_NOTICE_OVERRIDE,
-                        "notice for " + toGav(dep) + " changed with <override>; now: " + override.getNoticeUrl());
+
+            for (String gav : gavs) {
+                MavenProject dep = dependencyGavMap.get(gav);
+                if (dep == null) {
+                    getLog().warn("Unused override dependency " + gav + "; ignoring...");
+                    continue;
+                }
+                if (override.getUrl() != null) {
+                    final List<Pair<String, String>> newLicense =
+                            Collections.singletonList(new ImmutablePair<>(override.getUrl(), override.getName()));
+                    List<Pair<String, String>> prevLicense = dependencyLicenseMap.put(dep, newLicense);
+                    warnUnlessFlag(dep, IGNORE_LICENSE_OVERRIDE, "license list for " + toGav(dep)
+                            + " changed with <override>; was: " + prevLicense + ", now: " + newLicense);
+                }
+                if (override.getNoticeUrl() != null) {
+                    noticeOverrides.put(gav, override.getNoticeUrl());
+                    warnUnlessFlag(dep, IGNORE_NOTICE_OVERRIDE,
+                            "notice for " + toGav(dep) + " changed with <override>; now: " + override.getNoticeUrl());
+                }
             }
         }
         return dependencyLicenseMap;
diff --git a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/Override.java b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/Override.java
index 0391dfb..f19df51 100644
--- a/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/Override.java
+++ b/hyracks-fullstack/hyracks/hyracks-maven-plugins/license-automation-plugin/src/main/java/org/apache/hyracks/maven/license/Override.java
@@ -18,6 +18,9 @@
  */
 package org.apache.hyracks.maven.license;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class Override {
 
     @SuppressWarnings("unused") // set by Maven plugin configuration
@@ -27,6 +30,9 @@
     private String gav;
 
     @SuppressWarnings("unused") // set by Maven plugin configuration
+    private List<String> gavs = new ArrayList<>();
+
+    @SuppressWarnings("unused") // set by Maven plugin configuration
     private String name;
 
     @SuppressWarnings("unused") // set by Maven plugin configuration
@@ -36,6 +42,10 @@
         return gav;
     }
 
+    public List<String> getGavs() {
+        return gavs;
+    }
+
     public String getUrl() {
         return url;
     }
