public void addJarEntry(JarFile jarFile, JarEntry jarEntry, ApplicationModule module)
				throws IOException, CancelledException {
			long modifiedTime = jarEntry.getTime();
			String path = jarEntry.getName();
			if (extensionPointSuffixPattern.matcher(path).matches()) {
				checkExtensionPointClass(path, jarFile.getInputStream(jarEntry));
			}

			addToModuleTree(path, module);
			ZipEntry entry = new ZipEntry(path);
			entry.setTime(modifiedTime);
			try {
				jarOut.putNextEntry(entry);
			}
			catch (ZipException e) {
				System.out.println(e.getMessage());
				return;
			}

			InputStream in = jarFile.getInputStream(jarEntry);

			byte[] bytes = new byte[4096];
			int numRead;

			while ((numRead = in.read(bytes)) != -1) {
				monitor.checkCancelled();
				jarOut.write(bytes, 0, numRead);
			}
			in.close();

			jarOut.closeEntry();
		}
Puts a directory in the jar for Ghidra Extensions. This may be empty (if
no extensions are installed) but should exist nonetheless.

@throws IOException if there's an error writing to the jar
Ghidra/Features/Base/src/main/java/ghidra/util/GhidraJarBuilder.java