Ваша банка называется Helloworld.jar:
jar cfe HelloWorld.jar HelloWorld HelloWorld.class
Но вы называете его с именем пакета в качестве префикса к банке:
java -jar za/ac/uj/csc2a/HelloWorld.jar
java -jar HelloWorld.jar
должно быть правильно.
Обычно вы помещаете ваши классы и исходные тексты в разные каталоги, если вы используете пакеты. Типичное дерево выглядит как
proj
|-- src
| |-- za
| |-- ac
| `-- HelloWorld.java
|-- bin
|-- za
|-- ac
`-- HelloWorld.class
Вы можете перейти в каталог src и скомпилировать с помощью:
javac -d ../bin za/ac/HelloWorld.java
(для удобства уменьшена длина пакета / пути). При необходимости будет создана структура каталогов в bin
(или часто classes
)
Затем, чтобы объединить все с правильной структурой каталогов, вы изменяете на proj
и выдаете:
jar cfe HelloWorld.jar za.ac.HelloWorld -C bin .
Точка обозначает весь каталог.
jar -help
расскажет вам больше вариантов. Для создания пригодной для работы банки вам также необходим манифест. В противном случае вы можете запустить свое приложение:
java -cp HelloWorld.jar za.ac.HelloWorld
(снова немного сократил путь).
Обратите внимание, что структура каталога должна отражать объявление пакета. Вы не можете опустить деталь (za
) и перейти в следующий каталог (ac
). Класс для запуска - za.ac.HelloWorld, и поэтому он ищется в za / ac / - независимо от того, находится ли он в файловой системе или в jar-файле.
Если вы научитесь давать команды из правой базы, это легко. Если нет, вы получите годы проб и ошибок.
Для банки, которую можно начинать с java -jar
, вам нужен манифест. Шаблон генерируется командой jar. Там вы добавляете
Main-Class: za.ac.HelloWorld
со следующей пустой строкой. Опять же: нужно полное имя с пакетом. Main-Class
не может быть написано как Mainclass. За HelloWorld не должно следовать .class или .java - распространенные ошибки! Но, как вы знаете, вы можете использовать ключ -e, чтобы указать основной класс, но снова: включите имя пакета.