O uso de regras simples de --include e --exclude não funcionará aqui. Mas o rsync também oferece --filter .
Acho que rsync -ruvpgot --filter '+ *.java' certain_sub/ dest/ fará o que você quer, ou seja. copia todos os diretórios, mesmo os vazios, mas dentro dos diretórios apenas os arquivos correspondentes ao padrão "* .java" são copiados. Veja mais exemplos de man rsync sob o cabeçalho REGRAS DE FILTRO.