Вам нужно прочитать javadoc для используемых вами классов Apache ... и его суперклассов.Например, javadoc для ArchiveOutputStream
(супертип для классов архиватора jar и zip) говорит следующее:
Обычная последовательность вызовов при работе с ArchiveOutputStreams
:
Create ArchiveOutputStream object,
optionally write SFX header (Zip only),
repeat as needed:
putArchiveEntry(ArchiveEntry) (writes entry header),
OutputStream.write(byte[]) (writes entry data, as often as needed),
closeArchiveEntry() (closes entry),
finish() (ends the addition of entries),
optionally write additional data, provided format supports it,
OutputStream.close().
Вы запустили вызов write
прямо, не предоставив архиватору необходимую ему информацию о записи, которую вы добавляете в файл JAR.Это то, что говорит исключение IllegalStateException("No current entry")
.
Вы также можете прочитать examples в документации.Это объясняет (например), что архиватор для 7z имеет другой суперкласс.
Обратите внимание, что файлы zip, jar и 7z не являются просто форматами сжатия.Это архивные форматы для упаковки нескольких файлов в один архив.
Короче говоря, вы должны прочитать документацию API, прежде чем пытаться ее использовать.