[英]How to set java system properties globally on OS X?
我需要一種系統級方法來為所有java調用將java.awt.headless
屬性設置為true
。 也就是說,使用-Djava.awt.headless=true
不是一個選項,因為java是從我無法訪問的地方調用的(例如來自用Java / C /等編寫的另一個工具)。
我正在使用一堆用Java編寫的工具(特別是Adobe的Air ADT),這些工具依賴於AWT類。 當我在控制台上運行這些工具時,它們工作正常。 但是當我從SSH會話中運行它們時,它們會失敗並出現java.lang.InternalError: Can't connect to window server - not enough permissions
。 谷歌搜索我發現將java.awt.headless設置為true將解決問題。 它沒有,這是因為ADT本身在沒有 -Djava.awt.headless=true
情況下生成子Java進程。
是否有任何系統級方法來確保在調用Java時設置此屬性? 也許一些系統awt屬性文件或等價物?
最糟糕的情況我可以嘗試使用shell腳本替換/usr/bin/java
,將此參數添加到"$@"
但我希望避免這種情況。 (更新:為了確保我的理論是正確的,嘗試這個shell腳本破解它確實解決了問題。只是希望有一個更清潔的解決方案)
使用_JAVA_OPTIONS
而不是JAVA_OPTS
。 運行java時, _JAVA_OPTIONS
會自動被選中。
export _JAVA_OPTIONS=-Djava.awt.headless=true
adt ...
我知道在OS X上也是如此。 這表明這可能也適用於Windows和Linux。
看起來JAVA_TOOL_OPTIONS
環境變量的支持至少被Java 6添加到Sun / Oracle JVM中。它在Java 8文檔中有所描述。 我還沒有測試過,但它似乎也在OpenJDK中 。 這似乎是一個比其他答案更標准化的解決方案。
我能夠解決我遇到的問題:
JAVA_TOOL_OPTIONS=-Djava.awt.headless=true ant ...
這成功地將屬性傳播到從Ant調用的Gradle構建腳本( ./gradlew
)。 相比之下, ant -Djava.awt.headless=true ...
沒有將屬性傳播到子ant -Djava.awt.headless=true ...
。 找到最初在github上與Gradle相關的要點中描述的這個解決方案。
似乎沒有標准的方法來做到這一點。 這是我能想到的最好的:
/usr/bin/java
重命名為/usr/bin/java.ori
使用755權限創建以下/usr/bin/java
替換:
#!/bin/bash java.ori $JAVAOPT "$@"
然后,您可以使用環境變量JAVAOPT
來設置全局java選項。 這些也將傳播到可能生成的任何java子進程:
export JAVAOPT=-Djava.awt.headless=true adt ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.