回答
不,没有办法做到这一点。
有两种方式对源代码的文件名传递给javac的:
- 对于少数的源文件,简单地列出在命令行上的文件名。
- 对于大量的源文件,列出文件中的文件名,用空格或换行符分隔。然后使用javac命令行上的列表文件名,前面加@字符。
源代码文件名必须具备的.java后缀,类文件名必须具有的.class后缀,和源代码和类文件必须有标识类根的名字。例如,一个名为MyClass的类将被写入名为MyClass.java的源文件中,并被编译成名为MyClass.class的字节码类文件。
您可能会/dev/stdin
尝试与源文件(然后,你需要找到这迫使javac
将其视为Java源代码的选项)。
但我只是做一个shell脚本,把stdin放在一些后缀为.java
的临时文件上。
但我认为(我不确定)javac
是否真的想要在名为Foo.java
的文件中定义类Foo
。
Sun的Java可能无法做到这一点。用'gcj'可能有一个。 –
这对于普通的javac来说是不可能的 - 原因是大多数Java程序都由多个类组成,它们通常也分布在多个源文件(编译单元)上。
您可以使用Java编译器API为实际编译构建一个工具。
您将不得不创建一个JavaFileManager,它通过来自标准输入的文本来模拟文件,并将其传递给编译器。
你不能用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
- 1. 标准的Sun javac可以进行增量编译吗?
- 2. 从cmd编译javac时NoClassDefFoundError?
- 3. Javac编译参数
- 4. javac编译不符
- 5. javac编译错误
- 6. Javac编译编码问题
- 7. Eclipse可以编译但不在命令行(javac)
- 8. 无法找到javac编译
- 9. Ant Javac编译输出
- 10. javac编译多个文件
- 11. Javac交叉编译与1.7
- 12. 如何从stdin编译代码?
- 13. 无法从可执行文件jar中找到javac编译器
- 14. 是否可以从命令行运行Eclipse JDT编译器,如javac?
- 15. 可以Cython编译为EXE吗?
- 16. Flex可以编译Flash Lite 3吗?
- 17. 可以编译Razor视图吗?
- 18. 我可以让PyInstaller优化编译吗?
- 19. libpcap可以编译为iPhone/armv6吗?
- 20. 可以加速F#编译器吗?
- 21. GCC可以交叉编译AIX吗?
- 22. python distutils可以编译CUDA代码吗?
- 23. #undef可以减少编译时间吗?
- 24. Scala.js可以自行编译吗?
- 25. Python编译器,可以编译使用Pillow/PIL的程序吗?
- 26. 可以从命令行编译,但不能从makefile编译
- 27. 使用maven编译时无法找到Javac编译器 - 无法找到Javac编译器:
- 28. boost :: program_options可以从管道解析stdin字符串吗?
- 29. Apache Pig可以从STDIN而不是文件加载数据吗?
- 30. Powershell可以从stdin中读取代码吗?
这是什么实际目的? –
我认为可能是为了测试简单的命令(例如新的Float.parseFloat(“”))来查看他们会做什么。此外,可能尝试使用Java来处理像sed一样的内容,等等。有点像Java的迷你LinqPad ;-) –