Na seção "Linhas de comando" em systemd.service (5):
Note that the first argument (i.e. the program to execute) may not be a variable.
Eu sugeriria usar o especificador de instância %i
(você pode ler mais sobre isso em systemd.unit (5)), mas (agora estamos de volta em systemd.service (5)):
the first argument of the command line (i.e. the program to execute) may not include specifiers.
Eu acho que a melhor opção neste momento é realmente criar um script de shell que envolva a execução do binário java como sugerido por Warren Young ou você poderia executar ExecStart diretamente como no exemplo para linhas de comando shell nas "Linhas de Comando". "seção de systemd.service (5) que tem o seguinte exemplo:
ExecStart=/bin/sh -c 'dmesg | tac'
para que você possa fazer (não testado):
ExecStart=/bin/sh -c '${JAVA_HOME}....'