Я делаю простую пакетную программу, которая должна быть упакована в JAR со всеми зависимостями внутри. JAR-in-JAR eclipse делает мою программу настолько медленной, поэтому я решил извлечь требуемую библиотеку в JAR. Таким образом, ускоряйте выполнение, но сделайте мою "корневую" папку JAR настолько подробной. Чтобы извлечь банку, я использовал
<zipfileset excludes="META-INF/**.*" src="${dep.dir}/antlr-2.7.7.jar" />
и он работает правильно. Когда я пытаюсь использовать префикс, подобный этому
<zipfileset excludes="META-INF/**.*" prefix="dep/" src="${dep.dir}/antlr-2.7.7.jar" />
моя ошибка программы для ClassNotFoundException, поскольку она не могла этого найти. Я пытаюсь изменить MANIFEST, чтобы добавить dep/folder в classpath, но он не работает. Кто-то может мне помочь?
Файл класса Java должен существовать в файле.jar с контуром, который точно соответствует его полностью квалифицированному имени (что означает пакет + "." + Простое имя класса). Например, класс com.example.Person
должен существовать в файле.jar как com/example/Person.class
.
Это означает, что вы не можете использовать атрибут prefix
zipfileset
при включении файлов классов из другого.jar.
Атрибут Class-Path манифеста не относится к пути в файле.jar. Это список относительных URL-адресов других.jar файлов (по сравнению с.jar, содержащим манифест). Файл.jar всегда считается корнем элемента pathpath; нет способа ссылаться на путь в.jar как на запись в classpath.
Я не уверен, что такое "подробный" о корне вашего файла.jar. Насколько я могу судить, классы ANTLR только добавляют к нему каталог org
.