回答
不,沒有辦法做到這一點。
有兩種方式對源代碼的文件名傳遞給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 ;-) –