-name pattern corresponde ao nome do arquivo. SourceFile.java não corresponde a *pattern* , por isso está incluído. Se você não quiser descer em diretórios cujo nome contenha target , será necessário:
find . -name '*target*' -prune -o -name '*.java' \
-exec grep -sl 'someText' {} +
(lembre-se de citar os padrões, caso contrário eles podem ser expandidos pelo shell).
Por vários padrões:
find . \( -name 'pattern1' -o -name 'pattern2' \) -prune \
-o -name '*.java' -exec grep -sl 'someText' {} +
(AND ( -a ) está implícito quando não especificado entre dois predicados. AND tem precedência sobre OR ( -o ), daí os colchetes acima).
Observe que ! é o equivalente portátil / padrão de -not .
Se você quiser corresponder no caminho completo, precisará usar -path como:
find . -name '*.java' ! -path '*target*' -exec grep -sl someText {} +
Mas isso não impede que find desça para *target* diretórios, o que é um desperdício, pois find não reportará nenhum arquivo lá.