我有一个简单的罐子Hello.java:JAVA_TOOL_OPTIONS最大长度
class Hello {
public static void main(String[] a) {
System.out.println("Hello world!");
}
}
我想通过JAVA_TOOL_OPTIONS传递一些选项。如果$ JAVA_TOOL_OPTIONS长度的值小于或等于1024,它拾起:
$export JAVA_TOOL_OPTIONS=$(for i in {1..43}; do echo -n "-Dmyapp.opt${i}="123456789" "; done)
$ echo $JAVA_TOOL_OPTIONS | wc -c
1023
java -jar hello.jar
Picked up JAVA_TOOL_OPTIONS: -Dmyapp.opt1=123456789 -Dmyapp.opt2=123456789 -Dmyapp.opt3=123456789 -Dmyapp.opt4=123456789 -Dmyapp.opt5=123456789 -Dmyapp.opt6=123456789 -Dmyapp.opt7=123456789 -Dmyapp.opt8=123456789 -Dmyapp.opt9=123456789 -Dmyapp.opt10=123456789 -Dmyapp.opt11=123456789 -Dmyapp.opt12=123456789 -Dmyapp.opt13=123456789 -Dmyapp.opt14=123456789 -Dmyapp.opt15=123456789 -Dmyapp.opt16=123456789 -Dmyapp.opt17=123456789 -Dmyapp.opt18=123456789 -Dmyapp.opt19=123456789 -Dmyapp.opt20=123456789 -Dmyapp.opt21=123456789 -Dmyapp.opt22=123456789 -Dmyapp.opt23=123456789 -Dmyapp.opt24=123456789 -Dmyapp.opt25=123456789 -Dmyapp.opt26=123456789 -Dmyapp.opt27=123456789 -Dmyapp.opt28=123456789 -Dmyapp.opt29=123456789 -Dmyapp.opt30=123456789 -Dmyapp.opt31=123456789 -Dmyapp.opt32=123456789 -Dmyapp.opt33=123456789 -Dmyapp.opt34=123456789 -Dmyapp.opt35=123456789 -Dmyapp.opt36=123456789 -Dmyapp.opt37=123456789 -Dmyapp.opt38=123456789 -Dmyapp.opt39=123456789 -Dmyapp.opt40=123456789 -Dmyapp.opt41=123456789 -Dmyapp.opt42=123456789 -Dmyapp.opt43=123456789
Hello world!
如果$ JAVA_TOOL_OPTIONS长度值比1024多,它忽略了:
$export JAVA_TOOL_OPTIONS+="$JAVA_TOOL_OPTIONS -Dmyapp.opt44=123456789"
$ echo $JAVA_TOOL_OPTIONS | wc -c
2070
$ java -jar hello.jar
Hello world!
从哪里来呢JAVA_TOOL_OPTIONS字符长度限制来自哪里? 是否有可能超过1024个字符限制?
从技术上看下面的答案。你为什么要传递> 1024字符的JAVA_TOOL_OPTIONS?你不能直接将'-D'选项传递给你的'java'进程吗? – dnswlt
@dnswlt我感谢您的帮助!应用程序通过ENTRYPOINT脚本在Docker容器中启动。脚本(和Dockerfile)提供有限的一组变量。我无法修改它并直接传递-D选项。提供者建议使用JAVA_TOOL_OPTIONS。我可能会要求添加JAVA_OPT环境变量,因为JAVA_TOOL_OPTIONS似乎有限制。 – idobr