shebang_Shebang来Java了吗?
shebang
盡管添加對Unix風格的shebang ( #! )的支持從來不是 JEP 330 [“啟動單文件源代碼程序”]的主要目標,但圍繞JEP 330“單個文件源程序”的潛在功能存在一些問題。為了支持Unix風格的shebang ,在OpenJDK jdk-dev郵件列表上引起了廣泛的討論。 這場“激烈的討論”導致Mark Reinhold在JEP 330 的審查期 (現在是5月31日結束)上增加了一周時間 ,以便就JDK 330的目標JEP 330進行進一步的討論。
盡管對于是否應該添加shebang支持仍然存在一些分歧 ,但似乎共識已轉移到一個提案,以明確區分常規的獨立于平臺的Java源代碼文件(以擴展名.java結尾)和新的。 JEP 330“可執行”的平臺特定的“單文件源代碼程序”。 明顯的區別是值得注意的,因為它允許將Shebang表示在后者中(JEP 330可執行平臺特定的單文件源代碼程序),而不能在前者中使用(我們所使用的傳統Java平臺無關的源代碼)。都習慣了)。
在此討論中, 喬納森·吉爾斯 ( Jonathan Giles)的一條消息指出“不想更改JLS或javac的各種原因”,并指出“ shebang腳本是在某些(但不是全部)平臺上定義的可執行格式,”指出“創建一個shebang腳本通常不只是在文件中添加第一行?!边€闡明了在傳統Java源代碼和JEP 330可執行Java腳本之間進行顯式區分的概念:
雖然將文件重命名為命令友好名稱是可選的,但也希望將其重命名。 例如,名為“ HelloWorld.java”的源文件可能被安裝為“ helloworld”。 而且,盡管JEP描述了使用`java HelloWorld.java`執行小型單文件程序或僅使用`helloworld`作為特定??于平臺的shebang腳本執行的用例,但似乎并沒有常見的用例執行`HelloWorld.java`。 因此,如果通常將shebang腳本重命名為命令友好名稱,則將無法使用“ javac helloworld”直接對其進行編譯,因為這對于Javac而言不是有效的命令行。 這降低了使javac忽略shebang行的任何潛在便利。
由于Java源文件與特定于平臺的可執行腳本是不同的工件,因此有區別地對待它們是有道理的,并且由于我們不想更改Java語言以支持shebang行,因此建議修改JEP和實現,以便shebang絕不會從Java源文件(即以`.java`結尾的文件)中刪除行。 這就避免了處理Java源文件的工具生態系統必須處理諸如shebang行之類的任意工件的問題。 所做的更改仍將允許直接執行Java源文件(如java HelloWorld.java)和執行shebang腳本(如helloworld)。
下表總結了與每種“ Java”文件樣式相關的特征和優點。
| 內容描述 /名稱 | “ Java源文件(以.java擴展名結尾) ” | “ 可執行腳本(不使用[ .java ]擴展名。) “ |
| “ Java源文件 ” | “ shebang腳本 “ | |
| “ Java源文件 ” | “ 包含Java代碼的腳本 ”或“ 特定于平臺的可執行腳本 ” | |
| “ Java源文件,由以'.java'結尾的文件名標識 ” | ||
| 舍邦 | 不支持 | 支持的 |
| 平臺 | 獨立 | 依附 |
| 顯式編譯 | 是 | 沒有 |
喬納森·吉本斯(Jonathan Gibbons)總結了JEP 330的意圖 :“這里的總主題不是將Java演變為腳本語言,而是使諸如Java啟動器之類的工具更友好,以便支持在可執行文本文件中使用Java源代碼。以減少運行簡單程序的儀式?!?
討論還涵蓋了其他方法,例如binfmt_misc (另請參見此處 ),Unix風格的“ here文檔 ”( 此處定義文檔 ),“ 在Java啟動器中支持'-'STDIN源 ”以及將Linux更改為支持“ la”。 -la-bang: //! 。
討論中另一個有趣的旁注是Brian Goetz 對JEP 330如何達到其當前狀態的“追溯” 。 他談到了導致人們意識到的“無數小時的傾聽人們對Java的關注”,“人們表達關注的一個普遍主題是'激活能量'; 用Java做簡單的事情需要太多的固定工作。” Goetz指出,JShell和JEP 330是解決此問題的許多可能方法中的兩種,并且這兩種方法是在考慮“成本(在多個維度上)”后做出“關于哪種方法影響最大的主觀選擇”之后,從眾多方法中選擇的。做出這些選擇時的收益和利益(或我們對收益的主觀估計)?!?
因此,“常規Java”源代碼文件將不會得到shebang的支持,但這并不是什么大問題,因為它們確實不需要它們。 但是,用Java編寫的基于JEP 330的基于平臺的可執行單文件腳本似乎將在第一行中支持可選的shebang。 我們可能會在本周四之前知道JEP 330是否將針對JDK 11。
翻譯自: https://www.javacodegeeks.com/2018/05/shebang-coming-java.html
shebang
總結
以上是生活随笔為你收集整理的shebang_Shebang来Java了吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深耕海外!传音TECNO成非洲杯独家手机
- 下一篇: java nio教程_Java NIO教