Вы не можете сделать это с Sun java, но вы можете написать скрипт для обработки преобразования stdin в то, что может понять javac.
Что-то вроде этого скрипта Python:
import fileinput, re, subprocess
class_name = None
buffer = []
class_matcher = re.compile('\w+ class (?P<name>\w+)')
for line in fileinput.input():
if None == class_name:
buffer.append(line)
m = class_matcher.match(line)
if m:
class_name = m.group('name')
print "found %s" % class_name
file_name = '%s.java' % class_name
out = open(file_name, 'wb')
out.writelines(buffer)
else:
out.write(line)
if None == class_name:
print "Error: no class found"
else:
out.close()
print 'javac %s' % file_name
output = subprocess.call(['javac', file_name])
Обратите внимание, что скрипт создаст файл с именем класса в текущем каталоге. Вероятно, лучше использовать что-то в / tmp, но имейте в виду, что оно должно называться так же, как класс. Если вы тестируете скрипт, не делайте что-то вроде этого:
cat MyImportantJava.java | python javac-stdin.py