Программа, которая должна запускаться как служба Windows, должна предоставлять определенные функции, которые диспетчер службы Windows использует для связи с этой службой.
Пока не существует JVM, которая реализует эти функции напрямую (и я не знаю ни одной), вам понадобится какая-то оболочка.
Я успешно использовал srvany для службы Windows на основе Java (в основном это позволяет запускать любую программу в качестве службы Windows, и она отлично работает с Java)