По сути, вы могли бы просто собрать ваши классы с манифестом, в котором указано, где находится main (). Для класса c "Hello World" класса с именем Hello манифест будет выглядеть следующим образом ...
Manifest-Version: 1.0
Main-Class: Hello
Class-Path: .
Вы бы построили его так ...
$ jar cvmf MANIFEST.MF Hello.jar Hello.class
added manifest
adding: Hello.class(in = 415) (out= 285)(deflated 31%)
и выполнить его следующим образом ...
$ java -jar Hello.jar
Hello World
Вы можете сделать то же самое с более сложным приложением с зависимостями jar (включая встроенный Tomcat), но вам нужно будет разархивировать все зависимые файлы jar в каталог. и включите это в банку. Инструмент сборки, такой как Gradle, может сделать это проще.