jenkinsci/jenkins · error · IOException
Plugin installation failed. No manifest at {}
Error message
Plugin installation failed. No manifest at {} What it means
IOException thrown by ClassicPluginStrategy.createPluginWrapper after exploding a packed plugin archive: the expected META-INF/MANIFEST.MF is absent in the expanded directory. Jenkins requires every plugin to ship a manifest with at least its Short-Name; without it, installation cannot proceed.
Source
Thrown at core/src/main/java/hudson/ClassicPluginStrategy.java:170
URL baseResourceURL;
File expandDir = null;
// if .hpi, this is the directory where war is expanded
boolean isLinked = isLinked(archive);
if (isLinked) {
manifest = loadLinkedManifest(archive);
} else {
if (archive.isDirectory()) { // already expanded
expandDir = archive;
} else {
File f = pluginManager.getWorkDir();
expandDir = new File(f == null ? archive.getParentFile() : f, getBaseName(archive.getName()));
explode(archive, expandDir);
}
File manifestFile = new File(expandDir, PluginWrapper.MANIFEST_FILENAME);
if (!manifestFile.exists()) {
throw new IOException(
"Plugin installation failed. No manifest at "
+ manifestFile);
}
try (InputStream fin = Files.newInputStream(manifestFile.toPath())) {
manifest = new Manifest(fin);
} catch (InvalidPathException e) {
throw new IOException(e);
}
String canonicalName = manifest.getMainAttributes().getValue("Short-Name") + ".jpi";
if (!archive.getName().equals(canonicalName)) {
LOGGER.warning(() -> "encountered " + archive + " under a nonstandard name; expected " + canonicalName);
}
}
final Attributes atts = manifest.getMainAttributes();
// TODO: define a mechanism to hide classes
// String export = manifest.getMainAttributes().getValue("Export");View on GitHub (pinned to 2e228ff40b)
Solutions
- Confirm the plugin ships a manifest: 'unzip -p plugin.jpi META-INF/MANIFEST.MF' should print attributes including Short-Name.
- Clear the exploded directory and the corrupt archive, then reinstall the plugin from the update center.
- Check disk space and permissions in the Jenkins work directory so explosion can complete.
Defensive patterns
Strategy: validation
Validate before calling
File manifestFile = new File(expandDir, PluginWrapper.MANIFEST_FILENAME);
if (!manifestFile.exists()) {
throw new IOException("No manifest in " + archive + "; not a valid Jenkins plugin");
} Try / catch
try {
strategy.createPluginWrapper(archive);
} catch (IOException e) {
if (e.getMessage().contains("No manifest")) {
// delete the bad archive and reinstall from the update center
}
} Prevention
- Only install plugins that ship META-INF/MANIFEST.MF with a Short-Name.
- Ensure adequate disk space and permissions in the work directory.
- Validate plugins before deployment in CI.
When it happens
Trigger: A plugin archive that is a valid ZIP but is missing META-INF/MANIFEST.MF, or explosion failed silently leaving an incomplete directory, or MANIFEST_FILENAME points elsewhere.
Common situations: Hand-crafted or repackaged .jpi without a manifest; a partial explode due to disk-full/permissions; a ZIP that is not actually a Jenkins plugin.
Related errors
- Failed to load {}. The file does not exist
- Failed to load {}. It is not a file
- Failed to load {}
- Refusing to load the Jenkins test harness in production (via
- {} doesn't extend from hudson.Plugin
AI-assisted analysis of jenkinsci/jenkins@2e228ff40b (2026-08-14).
Data as JSON: /api/errors/4ad8fff8e1836b9c.
Report an issue: GitHub.