簡體   English   中英

如何在OS X上全局設置java系統屬性?

[英]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相關的要點中描述的這個解決方案。

似乎沒有標准的方法來做到這一點。 這是我能想到的最好的:

  1. /usr/bin/java重命名為/usr/bin/java.ori
  2. 使用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.

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