Для любого, кто наткнулся на этот пост, причина замешательства и причина, по которой это не сработало для меня, заключается в том, что я не принял во внимание тот факт, что я создавал свою банку где-то еще, чем вкорень диска, чтобы структура jar выглядела примерно так:
Users\SomeUser\Desktop\LearningJava\tryproject\packageOne\MainApp.class
Users\SomeUser\Desktop\LearningJava\tryproject\packageTwo\Greeter.class
Выше показано, как выглядит структура jar после того, как я создал ее с помощью следующей команды:
C:\Users\SomeUser>jar cfve tryapp.jar MainApp C:\Users\SomeUser\Desktop\LearningJava\tryproject\packageOne\MainApp.class C:\Users\SomeUser\Desktop\LearningJava\tryproject\packageTwo\Greeter.class
Теперь, чтобы запустить этот jar, вы должны изменить указанную выше команду так, чтобы вместо наличия только MainApp вы поместили всю структуру проекта следующим образом:
C:\Users\SomeUser>jar cfve tryapp.jar Users.SomeUser.Desktop.LearningJava.tryproject.packageOne.MainApp C:\Users\SomeUser\Desktop\LearningJava\tryproject\packageOne\MainApp.class C:\Users\SomeUser\Desktop\LearningJava\tryproject\packageTwo\Greeter.class
А также вы должны изменить пакеткаждого файла классов .java, чтобы они напоминали структуру, которую я только что изменил в команде.Таким образом, вместо package packageOne;
или package packageTwo;
вам нужно переписать их как package Users.SomeUser.Desktop.LearningJava.tryproject.packageOne;
и package Users.SomeUser.Desktop.LearningJava.tryproject.packageTwo;
.То же самое касается импорта.Теперь, если вы изменили все свои файлы .java и перекомпилировали их, вы сможете запустить jar с помощью команды, о которой я упоминал ранее.
Но более удачные решения и более простые, как, например, упомянутый @Prashant Guptaвыше.
Например, просто используйте:
jar cfve tryapp.jar packageOne.MainApp -C C:\Users\SomeUser\Desktop\LearningJava\tryproject\ .
Но он получит все файлы в этом каталоге, так что, возможно, просто будет отдельный каталог для двоичных файлов или всех файлов, которые вам нужны для вашего приложенияи еще один для исходных файлов.