feat: 新增 java run,按 JDK 版本自动套用调优参数运行 Java 应用
- 自动识别 JDK 8/11/17/21 与宿主机 CPU、可用内存;容器内以 cgroup 限额为准;堆默认取可用内存 50%,-Xms 与 -Xmx 同值 - 按版本分支生成参数:JDK 8 用 -Xloggc 一组,JDK 9+ 用 -Xlog:; 堆超过 30g 时自动省略压缩指针参数 - 支持 --jdk/--java/--heap/--xms/--env/--gc-log/--heap-dump-on-oom/ --print-flags/--dry-run;jar 之后的参数原样交给应用 - 前台运行:stdio 直连、退出码透传、SIGINT/SIGTERM 转发给 JVM - BuiltinRequest 增加 Stdin,使内置命令可以读取调用方输入 - 修正帮助中的用法行重复(自定义 Usage 不再追加通用透传尾巴) - 文档:新增 README.java.md,主 README 补充导航与示例
This commit is contained in:
@@ -25,7 +25,7 @@ func TestBuiltinIDsStable(t *testing.T) {
|
||||
"docker.prunebuilder", "docker.prunevolumes", "docker.clearall",
|
||||
"docker.compose.up", "docker.compose.down", "docker.compose.ps", "docker.compose.logs",
|
||||
"diagnose",
|
||||
"disk.usage", "net.pids", "net.ports", "proc.nohup", "proc.wait", "pkg.refreshindex",
|
||||
"disk.usage", "net.pids", "net.ports", "proc.nohup", "proc.wait", "java.run", "pkg.refreshindex",
|
||||
}
|
||||
if got := reg.IDs(); !reflect.DeepEqual(got, want) {
|
||||
t.Fatalf("IDs() =\n%v\nwant\n%v", got, want)
|
||||
@@ -373,3 +373,34 @@ func TestProcWaitIsBuiltinEverywhere(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestJavaRunIsBuiltinEverywhere(t *testing.T) {
|
||||
reg := Builtin()
|
||||
cmd, ok := reg.Lookup("java.run")
|
||||
if !ok {
|
||||
t.Fatal("java.run not found")
|
||||
}
|
||||
if cmd.RequiresYes {
|
||||
t.Error("java.run only starts an application; it must not require --yes")
|
||||
}
|
||||
if cmd.MinArgs != 1 || !strings.Contains(cmd.Usage, ".jar") {
|
||||
t.Errorf("java.run must require the jar argument, got MinArgs=%d Usage=%q", cmd.MinArgs, cmd.Usage)
|
||||
}
|
||||
for _, want := range []string{"JDK", "内存"} {
|
||||
if !strings.Contains(cmd.Action, want) {
|
||||
t.Errorf("java.run Action should mention %q:\n%s", want, cmd.Action)
|
||||
}
|
||||
}
|
||||
seen := map[string]bool{}
|
||||
for _, v := range cmd.Variants {
|
||||
if v.Builtin != "java.run" || len(v.Argv) != 0 {
|
||||
t.Errorf("variant for %s should be the java.run builtin, got %+v", v.Match.OS, v)
|
||||
}
|
||||
seen[v.Match.OS] = true
|
||||
}
|
||||
for _, osName := range []string{"linux", "darwin", "windows"} {
|
||||
if !seen[osName] {
|
||||
t.Errorf("java.run lacks a %s variant", osName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user