Потому что exec запускает команды в шелле sh без экспорта переменных окружения, в том числе $PATH, то есть он банально не знает, где лежит бинарник java. Укажите полные путь к бинрнику в команде, который вы передаете в exec().Например, у меня это будет выглядеть так:
$ which java
/usr/bin/java
в PHP:
exec("/usr/bin/java -cp .java")