Index: /trunk/src/org/openstreetmap/josm/plugins/PluginInformation.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/plugins/PluginInformation.java	(revision 18266)
+++ /trunk/src/org/openstreetmap/josm/plugins/PluginInformation.java	(revision 18267)
@@ -348,11 +348,20 @@
             sb.append(" <a href=\"").append(link).append("\">").append(tr("More info...")).append("</a>");
         }
-        if (downloadlink != null
-                && !downloadlink.startsWith("https://josm.openstreetmap.de/osmsvn/applications/editors/josm/dist/")
-                && !downloadlink.startsWith("https://github.com/JOSM/")) {
+        if (isExternal()) {
             sb.append("<p>&nbsp;</p><p>").append(tr("<b>Plugin provided by an external source:</b> {0}", downloadlink)).append("</p>");
         }
         sb.append("</body></html>");
         return sb.toString();
+    }
+
+    /**
+     * Determines if this plugin comes from an external, non-official source.
+     * @return {@code true} if this plugin comes from an external, non-official source.
+     * @since 18267
+     */
+    public boolean isExternal() {
+        return downloadlink != null
+                && !downloadlink.startsWith("https://josm.openstreetmap.de/osmsvn/applications/editors/josm/dist/")
+                && !downloadlink.startsWith("https://github.com/JOSM/");
     }
 
Index: /trunk/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java	(revision 18266)
+++ /trunk/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java	(revision 18267)
@@ -195,4 +195,15 @@
                 if (pi.getRequiredPlugins().contains("javafx")) {
                     System.out.println("Ignoring " + pi.name + " (requiring JavaFX and we're using Java < 11 in headless mode)");
+                    it.remove();
+                }
+            }
+        }
+
+        // Skip unofficial plugins in headless mode, too much work for us for little added-value
+        if (GraphicsEnvironment.isHeadless()) {
+            for (Iterator<PluginInformation> it = plugins.iterator(); it.hasNext();) {
+                PluginInformation pi = it.next();
+                if (pi.isExternal()) {
+                    System.out.println("Ignoring " + pi.name + " (unofficial plugin in headless mode)");
                     it.remove();
                 }
