簡體   English   中英

使用Shebang運行nashorn不接受-cp選項

[英]running nashorn using Shebang does not accept -cp option

我正在嘗試使用帶有Nashorn Shebang腳本和-cp選項(Java版本“ 1.8.0_31”)的jar類。 但是,它不起作用。 我已經做了一些測試。 以下shebang行有效:

  • #!/ usr / bin / jjs-腳本
  • #!/ usr / bin / jjs -fv(返回nashorn完整版本1.8.0_31-b13)

而以下不是:

  • #!/ usr / bin / jjs -cp ./some/lib/lib.jar將返回以下錯誤消息: “ -cp ./some/lib/lib.jar”不是可識別的選項。
  • #!/ usr / bin / jjs -scripting -fv將返回錯誤消息: “ -scripting -fv”不是公認的選項。 使用“ -h”或“ -help”查看所有支持的選項的列表”

所有選項在理論上都是有效的。 http://www.adam-bien.com/roller/abien/entry/setting_the_classpath_for_nashorn所示,classpath選項也應起作用。 有關nashorn和Shebang的更多信息: http ://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/shell.html#CHDEGHJJ

您遇到了與Nashorn或Java無關的問題。 根據此答案 ,從未明確指定使用shebang進行命令行參數處理,並且將第一個空格之后遇到的所有內容視為一個單獨的參數似乎是一種常見的行為。

因此,一種解決方案是編寫一個包含實際參數的jjs調用的shell腳本,並將該shell腳本用作Nashorn腳本的shebang行中的解釋器。

您可以在shebang腳本中使用-Dnashorn.args = -cp。 另請參見https://bugs.openjdk.java.net/browse/JDK-8072138

在您看來,您需要一種自動將JAR添加到類路徑的方法時,我將重點介紹我編寫的一個包裝器,該包裝器允許您定義要添加到腳本的類路徑的Maven坐標依賴項(包括傳遞對象),因此您可以使用“#dep”行編寫腳本:

#!/usr/bin/env jjs-with-deps
#
# The line below is parsed by the jjs-with-deps script to build a new
# classloader in which the script is really executed, including logback
# and its transitive dependencies.
#
# dep:ch.qos.logback:logback-classic:1.1.2

var log = org.slf4j.LoggerFactory.getLogger("com.example.app.Logger");
log.info("Hello World!");

它確實需要將Maven安裝在PATH上的某個位置,並且確實會稍微增加啟動時間(但同樣,您已經在啟動JVM;)。 將任何依賴項下載到本地M2存儲庫時,給定腳本的首次調用會慢得多。

鏈接是https://github.com/stevestorey/jjs-with-deps

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM